8.C语言预编译

61 阅读1分钟

C语言提供了预编译指令,让代码

#define:定义常量,或者称作宏

代码中使用这些宏变量,在编译时都会替换为常量对应的值

#include <stdio.h>#define A 100        //定义常量A的值为100
#define B "hello"    //定义常量B的值为helloint 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*v2int 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部分正常编译,否则预编译阶段删除它们。