C++条件编译

5 c++ c-preprocessor

我有以下代码片段:

#ifdef DO_LOG
#define log(p) record(p)
#else
#define log(p)
#endif

void record(char *data){
.....
.....
}
Run Code Online (Sandbox Code Playgroud)

现在如果我调用log("hello world")我的代码并且DO_LOG没有定义,那么该行是否会被编译,换句话说它会占用字符串"hello world"的内存吗?

PS程序中有很多记录调用,它对内存敏感,所以有没有其他方法有条件地编译,所以它只依赖于#define DO_LOG

unw*_*ind 14

通过检查生成的二进制文件,这对于自己进行验证应该是微不足道的.

我会说"不",因为表达式完全消失,编译器永远不会看到字符串(它被预处理器的宏扩展删除).

  • @unwind&@Neil:我很感兴趣你是如何验证观察到的行为不仅仅是编译器的特性. (2认同)