预处理执行时间:
编译之前,其处理结果将会被作为独立的文件传至真正的编译器。
预处理功能:
有条件地编译文件的若干部分(由指令#ifdef #ifndef #if #else #elif #endif控制)
替换文本宏(由指令#define #undef # ##控制)
包含其他文件(由指令#include控制)
产生一个警告(由指令#warning控制)
产生一个错误(由指令#error控制)
实现定义的行为(有指令#pragma控制)
编译之前,其处理结果将会被作为独立的文件传至真正的编译器。
预处理功能:
有条件地编译文件的若干部分(由指令#ifdef #ifndef #if #else #elif #endif控制)
替换文本宏(由指令#define #undef # ##控制)
包含其他文件(由指令#include控制)
产生一个警告(由指令#warning控制)
产生一个错误(由指令#error控制)
实现定义的行为(有指令#pragma控制)
文件名和行信息提供给预处理期(由指令#line控制)
#运算符
出现在宏定义中的#运算符把跟在其后的参数转换成一个字符串。有时把这种用法的#称为字符串化运算符。例如:
#definePASTE(n)"adhfkj"#n
main()
{
printf("%s/n",PASTE(15));
}
宏定义中的#运算符告诉预处理程序,把源代码中任何传递给该宏的参数转换成一个字符串。所以输出应该是adhfkj15。
##运算符
##运算符用于把参数连接到一起。预处理程序把出现在##两侧的参数合并成一个符号。看下面的例子:
#defineNUM(a,b,c)a##b##c
#defineSTR(a,b,c)a##b##c
main()
{
printf("%d/n",NUM(1,2,3));
printf("%s/n",STR("aa","bb","cc"));
}
最后程序的输出为:
123
aabbcc