编译程序前,先由预处理器检查程序(因此称为预处理器)。根据程序中使用的预处理器指令,预处理器用符号缩略语所代表的内容替换程序中的缩略语。
预处理器不能理解C,它一般是接受一些文件并将其转换成其他文本。
翻译程序的第一步
对程序作预处理前,编译器会对它进行几次翻译处理。
printf("That‘s wond\ // 一个物理行 erful!\n"); // 又一个物理行
↓ 可转换为
printf("That‘s wonderful!\n"); // 一个逻辑行
为什么说“换行符”代表按下回车键在源代码文件中新起一行所产生的字符,而不是符号\n代表的字符?且看下面分解:
#define OW1 "Consistency is the last refuge of the unimagina\ tive. - Oscar Wilde" #define OW2 "Consistency is the last refuge of the unimagina\ tive. - Oscar Wilde" // 注意最起始有一个空格,这行开头和tive之间的空格也作为字符串的一部分 printf("%s\n", OW1); printf("%s\n", OW2);
↓ 输出分别是
Consistency is the last refuge of the unimaginative. - Oscar Wilde // OW1 Consistency is the last refuge of the unimagina tive. - Oscar Wilde // OW2
int /* 这不是个空格 */ fox;
↓ 将变成
int fox;
C实现可能还会选用单个空格代替每一个空白字符(不包括换行符)序列
原文:http://www.cnblogs.com/yerenyuan/p/5111476.html