1、无参宏的宏名后不带参数,一般格式为
#defind 标识符 字符串
2、举例
#define PI 3.14
#define EXP x*10*1.5
编译器在处理时,会将源程序中所有的PI替换为3.14,将所有的EXP替换为表达式x*10*1.5
#include
#define PI 3.14
#define EXP x*10*1.5;
int main() {
float cycle = PI * 10 * 10;
float r;
r = EXP;
}
使用命令gcc -E main.c -o main.i对文件进行预编译
# 6 "array.c"
int main() {
float cycle = 3.14 * 10 * 10;
float r;
r = x*10*1.5;;
}
C语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数
对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。带参宏定义的一般形式为
#define 宏名(形参表) 字符串
示例
#include
#define F(x) x*x*x;
int main() {
int result = F(3);
return 0;
}
预编译
# 5 "array.c"
int main() {
int result = 3*3*3;;
return 0;
}
宏定义注意事项
如果定义的字符串是表达式,表达式中的变量需要用()包起来,因为在预处理阶段宏展开时,可能会用表达式来替换宏定义中的变量
#define F(x) (x)*(x)*(x)
不加括号效果演示
#define F(x) x*x*x;
int main() {
int result = F(3+2);
return 0;
}
# 5 "array.c"
int main() {
int result = 3+2*3+2*3+2;;
return 0;
}
C语言中的文件包含命令例如:#include ,文件包含语法格式如下
#include <文件名>
#include "文件名"
注意
常用条件编译指令
| 条件编译指令 | 说明 |
|---|---|
| #if | 如果条件为真,则执行响应操作 |
| #elif | 如果前面的条件为假,而该条件为真,则执行相应操作 |
| #else | 如果前面条件均为假,则执行响应操作 |
| #endif | 结束响应的条件编译指令 |
| #ifdef | 如果该宏已定义,则执行响应操作 |
| #ifndef | 如果该宏没有定义,则执行响应操作 |
示例
#include
#define debug 0;
int main() {
#ifdef debug
printf("debug\n");
#else
printf("no debug\n");
#endif
#if 0
int a=10;
#endif
return 0;
}
ifdef后跟宏名称,而不是变量名,必须以#endif结尾