69,371
社区成员
发帖
与我相关
我的任务
分享
VS IDE中,在不明白的符号上点鼠标右键,选转到定义和查找所有引用。
#ifdef _DEBUG
#define DebugPrint(x) cout << x << endl
#ele
#define DebugPrint(x)
#endif
代码中调用 DebugPrint 时,在调试版本的时候打出一些信息,正式版本可能只被替换为空,也就是一个分号。
2. 跨平台
如果你要封装一种库,比如网络库,界面库等。但有的时候,某个平台需要做一些额外操作,而另外一个平台不需要的时候,就会根据不同平台定义不同的宏,其中的一个平台这个宏被替换为空或 0 等。比如 Windows 平台的网络库需要调用 WSAStartup 加载 Windows Socket 库并使用 WSACleanup() 关闭,而 Linux 下不需要。这样有些开发者会定义一个通用的宏,作用是启动网络库。当系统为 Linux 时,定义为空,不作任何操作。这是LWIP代码中的,实际代码如下:#define sys_thread_new(n,t,a,s,p)
[quote=引用 6 楼 hdt 的回复:] 宏就是替换 比如 #define max(x,y) x>y?x:y z = max(3,1); 替换为 z = 3>1?3:1; 以这段代码来看 #define sys_thread_new(n,t,a,s,p) 就是把sys_thread_new(....) 替换为空
宏就是替换 比如 #define max(x,y) x>y?x:y z = max(3,1); 替换为 z = 3>1?3:1; 以这段代码来看 #define sys_thread_new(n,t,a,s,p) 就是把sys_thread_new(....) 替换为空
要看这个是用在什么环境里的。 这个宏定义里面会设计到逗号运算符。相当于#define (d)