c语言编译过程
预处理
简单来说是替换
gcc -E -o outputFile InputFile --预处理
编译(编译成汇编文件)
.c — .s gcc -S .c
汇编(编译成对象文件 .o文件 包含各个函数的入口标记)
.s ---- .o gcc -c .s
链接(可执行文件 link)
gcc -o outputFile inputFile
预处理命令
include :包含头文件
define :宏定义
思考一:为什么define 和 include 不是c语言中的关键字?
关键字是在编译过程中会使用的 而define和include 会在预处理时就将其替换
成等价的语句 不会出现在编译的过程
define宏定义:预处理时 只进行替换 不进行语法的检查 (完全替换)
#else #ifndef #endif #ifdef:条件编译
#ifdef xxx ====如果xxx定义了 就编译 里面包含在里头的代码
代码
#else
预定义宏(这是系统定义的宏 跟编译有关 如gcc)
__FUNCTION__ :当前所在的函数的函数名(%s)
__LINE__: 输出行号(%d)
__FILE__:输出当前的文件名(%s)
宏定义展开的 #、##
#:代表将值字符串化 如:#define ABC(x) #x ----把x字符串化 ABC(x)== string(x)
##:连接符
如:MyDay1 MyDay2
#define Day(x) MyDay##x
Day(1)==MyDay1 Day(2)==MyDay2
宏定义常量(宏定义时宏名都要用大写字母 注意式子要加上括号)
一般宏定义的常量都是int常量
改变类型
如:#define VAR (99999*99999)L ----将int转化为long
UL:unsigned long
LL:long long