C关键字
预处理
宏函数
- 避免了函数的入栈、出栈、跳转等开销,可以提高程序运行效率
- 多次调用,会是代码变的庞大,以空间换时间
- 避免替换错误需要添加括号
#define AAD(x, y) (x + y)
#define MAX(x, y) ( (x > y) ? (x) : (y) )
宏的有效范围
- 从宏定义的位置开始到文件结束或者取消宏定义
- 不做作用域检测
- 不做类型检测
void test()
{
#define NUM 10
}
int main()
{
printf("%d\n", SUM);
}
撤销宏
#undef SUM
内置宏
printf("代码在 %d 行\n", __LINE__);
printf("代码编译的时间%s %s\n", __DATE__, __TIME__);
printf("文件名 %s\n", __FILE__);
printf("函数名%s\n", __FUNCTION__);
条件编译ifdef
#ifdef 标识符
程序段1
#else
程序段2
#endif
它的功能是:如果标识符已被#define命令定义过,则对程序段1进行编译;
否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else可以没有,#endif不可或缺
#include <stdio.h>
int main()
{
#ifdef _DEBUG
printf ("正在使用DEBUG模式编译代码。。。\n");
#else
printf ("正在使用Release模式编译代码。。。。\n");
#endif
return 0;
}
编译的时候增加宏:gcc -D_DEBUG
#if 常量表达式
程序段1
#else
程序段2
#endif
它的功能是:如果常量表达式的值为真(非0),则对程序段1进行编译;
否则对程序段2进行编译。因此可以使程序在不同条件下编译,完成不同的功能。
#include <stdio.h>
// window _WIN32
// Linux __linux__
int main()
{
#if (_WIN32