我有以下代码片段:
#ifdef DO_LOG
#define log(p) record(p)
#else
#define log(p)
#endif
void record(char *data){
.....
.....
}
现在如果我在我的代码中调用 log("hello world")
而 DO_LOG
没有定义,该行是否会被编译,换句话说它会吃掉增加字符串“hello world”的内存?
附言程序中record调用较多,对内存敏感,有没有其他方法可以条件编译,只依赖于#define DO_LOG
?
最佳答案
通过检查生成的二进制文件来自行验证这应该是微不足道的。
我会说“不”,因为表达式完全消失了,编译器永远不会看到字符串(它被预处理器的宏扩展删除)。
关于C++条件编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2506632/