0%

编译器参数和条件编译

在头文件中经常见到下面的代码,以防止头文件的重复包含

1
2
3
4
#ifndef  _XXX_H
#define _XXX_H
//...
#endif

编译宏

1
2
3
4
5
6
7
__LINE__  //行
__FILE__ //文件名
__DATE__ //日期
__TIME__ //
__STDC__ //

__func__

无参宏

1
#define PI 3.1415926

宏函数


#define 宏名称( [形参列表] ) 替换文本
#define 宏名称( [形参列表 ,] ... ) 替换文本  

1
#define MIN(a,b) ((a)<(b)?(a):(b))

#和’##‘


#和##
使用# 将宏参数转换为字符串,使用 ## 将宏参数进行连接。

1
2
3
4
5
#define STR(x) #x
STR(helloworld) //"helloworld"

#define CONS(a, b) (a##e##b)
CONS(2,3) //2e3


宏嵌套

多行

1
2
3
4
5
#define swap(x,y,T) do { \
T temp = (*x);\
(*x) = (*y); \
(*y) = temp; \
} while (0)

查看宏预处理之后的代码


在vs中我们可以选择属性 –》预编译选项–》编译文件选择产生文件