C编程实战

C语言介绍

 

什么是C语言?

1.C语言是由AT&贝尔实验室的丹尼斯·里奇于1972年发明的,那个时候所实验的电脑主要是PDP-11。

C编程实战_第1张图片

2.C语言在今天还仍然得到广泛使用的原因在于,其易于拓展到新的系统架构、高效性以及更面向于计算机底层。

C语言特性

  • 较少的关键字
  • 结构体、联合体等紧凑数据类型
  • 支持指针或指针操作
  • 外部标准库
  • 最终是编译到机器码执行
  • 支持宏预处理器

C语言版本

  • 1972年——C语言的发明
  • 1978年——C语言的第一个规范版
  • 1989年——C89版(也常称为ANSI C或者标准C)
  • 1990年——C90版(被ISO采纳)
  • 1999年——C99标准版(有非常高的反向兼容性,但是还不被很多编译器所支持)
  • 2007年——C1X新标准版

C语言用途

  • 系统编程——如Linux操作系统
  • 微控制器编程——汽车、飞机电子设备
  • 嵌入式处理器编程——手机等移动设备
  • DSP编程——数字信号处理、电视系统

C语言警告——固有的不安全性

  • 无范围检查
  • 编译时有限的类型安全性
  • 运行时无类型检查
  • 最好在调试器里运行,如gdb
  • 从不要用root模式运行

编译与调试

gcc编译

# gcc -Wall infilename.c -o outfilename.o

# gcc -g -O0 -Wall infilename.c -o outfilename.o

  • -Wall,使能编译器警告
  • -g,使能调试信息
  • -O0,让编译器进行编译时代码优化(gcc的默认优化)
  • -O1,代码大小与执行时间优化
  • -O2,进一步的代码大小与执行时间优化
  • -O3,更进一步的代码大小与执行时间优化

gdb调试——常用命令

# gdb hello.o

  • break 行号,设置断点
  • break 文件:行号,在指定文件中设置断点
  • run,运行程序
  • c,继续执行
  • next,执行下一行
  • step,执行下一行或进入函数
  • quit,退出gdb
  • print 表达式,打印表达式的值

内存调试

valgrind ./hello.o

I/O

标准输入输出

int putchar(int),将字符进行标准输出,返回打印出的字符或者EOF错误。

int getchar(),从标准输入获取下一个字符,出现错误返回EOF。

格式化输出规范:%[标记:+或-][宽度][.精度][长度][类型]

字符串输入输出

int sprintf(char string[], char format[], arg1, arg2),将字符写进字符串数组。

int sscanf(char str[], char format[], arg1, arg2),从字符串数组获取字符。

文件I/O

int getc(FILE* fp),从文件流读取单个字符。

char[] fgets(char line[], int maxlen, FILE* fp),从文件流读取单行字符。

int putc(int c, FILE* fp),向文件流写入单个字符。

int fputs(char line[], FILE* fp),向文件流写入单行字符。

int fscanf(FILE* fp, char format[], arg1, arg2),从文件流读取格式化字符。

物理内存与虚拟内存

物理内存

定义为计算机能够用于进行数据存储和数据获取的物理资源。

  • 缓存
  • RAM(随机存取存储器)
  • 硬盘
  • 即插即用存取器

虚拟内存

由操作系统所抽象的那部分,能够被代码使用、获取的带地址的内存空间。

Windows操作系统分配了大概2GB的虚拟内存,Linux操作系统大概为3~4GB。

操作系统将虚拟内存映射到物理内存的不同部分上,其可以使用的内存部分常被成为堆栈。

栈——被声明的变量的归宿。

堆——动态内存分配的归宿。

标准库

:打开、关闭文件

FILE* fopen(const char *filename, const char *mode),以读r、写w、追加a、二值文件追加b的模式打开文件。

FILE∗ freopen(const char∗ filename, const char∗ mode, FILE∗ stream),将标准流(stdin/stdout/stderr)重定向到文件。

int fflush (FILE ∗stream),冲洗任何未写出的数据,如果stream是NULL,就会对所有输出流进行数据冲洗。

:文件操作

int remove(const char ∗filename),从文件系统移除文件,成功返回0,否则返回非零值。

int rename(const char ∗oldname,const char ∗newname),文件重命名(注意文件权限以及文件存在与否)。

:临时文件

FILE∗ tmpfile(void),创建一个临时文件,程序结束后被自动删除。

你可能感兴趣的:(C)