宏预处理
2016-07-06 14:40
309 查看
1、宏定义
2、宏函数
但是这个宏有一个缺点。
当调用比如MAX(3,2)*2时会出现不想要的结果。
MAX这种形式是留给实现的。
综上,修改如下:
宏函数没有做类型检查,int, float, double类型都可以进行比较,可以避免写更多例如这样的函数:
3、宏条件与处理
例如在编译的时候带入宏参数:
gcc -o InMac -DPLATFORM xx.cpp
4、宏可变参数
以日志宏函数为例子, 如下:
// THE_NUM 宏定义为3 #define THE_NUM 3
2、宏函数
#define MAX(A,B) A>B?A:B
但是这个宏有一个缺点。
当调用比如MAX(3,2)*2时会出现不想要的结果。
MAX这种形式是留给实现的。
综上,修改如下:
#define MAX(A,B) ((A)>(B)?(A):(B))
宏函数没有做类型检查,int, float, double类型都可以进行比较,可以避免写更多例如这样的函数:
int max(int a, int b ); float max(float a, float b);
3、宏条件与处理
#define WIN 1 #define LINUX 2 #define MAC 3 #if PLATFORM == WIN printf("In Window\n"); #elif PLATFORM == LINUX printf("In Linux\n"); #elif PLATFORM == MAC printf("In Mac\n"); #else printf("Unknow Platform\n"); #endif
例如在编译的时候带入宏参数:
gcc -o InMac -DPLATFORM xx.cpp
结果输出:In Mac
4、宏可变参数
以日志宏函数为例子, 如下:
#include <stdio.h> //宏函数定义 /** 第一种方案 **/ #define plog_i(...) do{\ printf("[%s %s]-[%s]-%s() INFO : ", __DATE__ ,__TIME__, __FILE__, __FUNCTION__)&&\ printf(__VA_ARGS__)&&\ printf("\n");\ }while(0) #define plog_w(...) do{\ printf("[%s %s]-[%s]-%s() WARN : ", __DATE__ ,__TIME__, __FILE__, __FUNCTION__)&&\ printf(__VA_ARGS__)&&\ printf("\n");\ }while(0) #define plog_e(...) do{\ printf("[%s %s]-[%s]-%s() ERROR: ", __DATE__ ,__TIME__, __FILE__, __FUNCTION__)&&\ printf(__VA_ARGS__)&&\ printf("\n");\ }while(0) /** 第二种方案 **/ #define LOG(LEVEL, FORMAT, ...) printf(LEVEL);printf(FORMAT, ##__VA_ARGS__); #define LOG_E(FORMAT, ...) do{LOG("#ERROR: ", FORMAT, ##__VA_ARGS__);printf("\n");}while(0); #define LOG_W(FORMAT, ...) do{LOG("#WARM : ", FORMAT, ##__VA_ARGS__);printf("\n");}while(0); #define LOG_I(FORMAT, ...) do{LOG("#INFO : ", FORMAT, ##__VA_ARGS__);printf("\n");}while(0); #define LOG_D(FORMAT, ...) do{LOG("#DEBUG: ", FORMAT, ##__VA_ARGS__);printf("\n");}while(0); int main() { /** 自己测试 **/ return 0; }
相关文章推荐
- php中define用法实例
- PHP define函数的使用说明
- Linux c中define的用法小结
- typedef和#define的用法以及区别
- PHP中使用hidef扩展代替define提高性能
- 探讨php define()函数及defined()函数使用详解
- 条款02:尽量以const,enum,inline替换#define
- php中const与define的使用区别
- const 和 #define 的区别
- please define NDK_ROOT
- C语言之“宏”
- 真假常量——const和define
- typedef与#define的区别
- 关于js中的xxx is not defined,undefined,null
- typedef & define
- PHP常量详解:define和const的区别
- (转载)Declare vs Define in C and C++
- 9.1常用的预编译
- typedef与define
- const 和 #define区别