预处理和宏

来源:互联网 发布:范莎学院怎么样知乎 编辑:程序博客网 时间:2024/06/05 14:48

1.预处理

文件包含:
#include<>:到系统指定的路径寻找,一般是:/user/include;
#include “”:优先从当前目录开始,一般适用于自定义头文件。

2.宏定义

#define PI 3.1415

单纯的替换
注意:不要加等号,不要末尾加分号。

3.带参数的宏

#define MAX(x,y) (x)>(y)?(x):(y)

注意:

  • 带参数的宏,参数不能是多次计算后的数值。比如:MAX(x++,j++); //错误
  • 每个宏都应该被包含在一对小括号里面,保证运算顺序。
#define MUL(x,y) x*y //很容易出错,MUL(1+2,2+3),替换后1+2*2+3#define MUL(x,y) (x)*(y)//还是会错,30/MUL(1+2,2+3),替换后30/3*5,但是其实是想30/(3*5)#define MUL(x,y) ((x)*(y))//这样才对

4.运算符

     //#:将宏中的参数转换为字面值常量。限定:只能出现在带参数的宏的替换列表中。     #define PRINT(n) printf(#n"=%d",n)     //##:将两个标识符粘合在一起形成一个标识符     #define MK_ID(n)i_##n     MK_ID(1) i_1     MK_ID(23) i_23

5.C语言中预定义的宏:

<1>__LINE__:当前正当编译的程序的行号 %d<2>__FILE__:当前正当编译的源程序的名字 %s<3>__DATE__:编译程序的日期 %s<4>__TIME__:编译程序的时间 %s<5>__STDC__:判断编译器是否符合C标准,返回0或者返回1。一般:__STDC__?"符合":"不符合"

6.条件编译:

#if #endif
防止该头文件被重复引用。

好例子:

//交换两个参数值的宏定义为:#define SWAP(a,b)\(a)=(a)+(b);\(b)=(a)-(b);\(a)=(a)-(b);//输入两个参数,输出较小的一个:#define MIN(A,B) ((A) < (B))? (A) : (B))//表明1年中有多少秒(忽略闰年问题):#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL//已知一个数组table,用一个宏定义,求出数据的元素个数#define NTBL#define NTBL (sizeof(table)/sizeof(table[0]))
0 0
原创粉丝点击