目录
一、c语言书籍我推荐
《C语言深度解剖》、《C专家编程》、《程序员面试宝典》和《C和指针》。
二、gcc概述
原名GNU C Compiler,C语言翻译官(C语言翻译成机器语言)。
三、gcc常用命令
命令 | 注释 |
gcc -v | 查看gcc版本 |
gcc -o 输出文件名 输入文件名 gcc 输入文件名 -o 输出文件名 | 模糊化命令,根据文件名后缀判断调用不同命令(-o 后面一定跟的是output文件)。加上-v后卡查看gcc调用的具体工具。输入文件为.o时,就是链接过程 |
gcc -S -o 输出文件名.s 输入文件名.c | 编译 |
gcc -c -o 输出文件名.o 输入文件名.s | 汇编 |
gcc -E -o 输出文件名.i 输入文件名.c | 预处理 |
gcc -I 查找头文件的目录 | 头文件路径 |
gcc -D 宏名 | 自动在源文件中添加宏 |
四、C语言编译过程
预处理:处理宏定义、文件包含、条件编译和注释,生成预处理后的代码。
gcc -E
编译:将预处理后的代码编译为汇编代码。
gcc -S
汇编:将汇编代码转换为目标文件(机器代码)。
gcc -c
链接:将多个目标文件和库文件链接为最终的可执行文件或库文件。
gcc -o
五、常见错误
1.预处理错误
#include “name”:双引号常用于当前文件路径下寻找(常用于自定义库)。
#include <name>:首先在系统默认的标准库目录中查找头文件,然后根据编译器配置的路径(常用于系统库)。
no find
2.编译错误
; { }等
3.链接错误
原材料不够 。
undefine reference to ‘function’
原材料多了。
multiple definition of “fun”
六、预处理的运用
#include 包含头文件
#define 宏 替换,不进行语法检查
#define 宏名 宏体 注意养成习惯加括号。
#define ABC 5+3
printf("the %d \n", ABC * 5); //5+3 * 5
#define ABC (5+3)
#define ABC(x) (5+(x))
#ifdef #else #endif
预定义宏:系统库中实现
__FUNCTION__:函数名
__LINE__:行号
__FILE__:文件名
printf("the %s, %s, %d", __FUNCTION__, __FILE__, __LINE__);
# 字符串化
#define ABC(x) #x //"x"
## 连接符
#define ABC(x) ABC##x //ABCx