C语言提供了预编译指令,让代码
#define:定义常量,或者称作宏
代码中使用这些宏变量,在编译时都会替换为常量对应的值
#include <stdio.h>
#define A 100 //定义常量A的值为100
#define B "hello" //定义常量B的值为hello
int main() {
printf("%d",A); //打印A
printf("\n"); //换行
printf(B); //打印B
return 0;
}
//打印
100
hello
#define:定义方法
方法的声明方式 #define name(param1,param2...) stuff name表示方法名称,括号中间的参数可以任意个,stuff表示方法内容,name和方法(括号之间不能有空格,stuff 和方法 ) 括号之间需要有一个空格
#include <stdio.h>
#define A 100
#define ADD(v1,v2) v1+v2 //定义方法名称为ADD,参数是v1和v2,方法内容是v1和v2相加
int main() {
printf("%d",A); //打印宏常量A
printf("\n"); //换行
printf("%d",ADD(A,1)); //调用宏方法
return 0;
}
//打印
100
101
//如果换成乘法会如何
#define ADD(v1,v2) v1*v2
int main() {
printf("%d",ADD(2+1,2+1)); //最终打印5,而不是9
//因为在调用ADD方法后生成的计算表达式是:2+1*2+1。所以值是5,宏方法不会提前将参数计算出来,而是直接参与到方法内部计算中
return 0;
}
//所以为了数据准确,要在宏方法内的计算中加上括号
#define ADD(v1,v2) (v1)*(v2)
int main() {
printf("%d",ADD(2+1,2+1));//打印9
return 0;
}
条件编译
语法:
if 宏常量
statements
endif
说明:如果宏常量的值为非0,statements部分正常编译,否则预编译阶段删除它们。