C++条件编译

标签 c++ c-preprocessor

我有以下代码片段:

#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/

相关文章:

c - 奇怪的#define 声明,无法理解它扩展的内容

c++ - MFC 的 InitInstance 函数中创建的对象的生命周期有什么特别之处?

c++ - 使用自定义 python 在 mac os x lion 上提升 python

java - 查找 (x,y) 坐标之间的最大距离

c++ - boost::shared_future 和 when_all 有多个延续

c++ - 将定义的函数片段更改为可测试函数,如何传递参数?

c - 如何在C宏中区分常量字符串和char *

C++ 重复调用一个函数系统挂起

C++ fatal error C1017

c - 在未定义之前展开宏