首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++条件编译

C++条件编译
EN

Stack Overflow用户
提问于 2010-03-24 17:51:54
回答 4查看 1.8K关注 0票数 5

我有以下代码片段:

代码语言:javascript
复制
#ifdef DO_LOG
#define log(p) record(p)
#else
#define log(p)
#endif

void record(char *data){
.....
.....
}

现在,如果我在代码中调用log("hello world"),而DO_LOG没有定义,这行代码会被编译吗,换句话说,它会占用字符串"hello world“的内存吗?

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-24 17:53:45

通过检查生成的二进制文件,您可以轻松地验证这一点。

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

票数 14
EN

Stack Overflow用户

发布于 2010-03-24 17:56:07

因为预处理器在编译器之前运行,所以当编译器运行时,这一行甚至不存在。所以答案是否定的,它根本不使用任何内存。

票数 4
EN

Stack Overflow用户

发布于 2010-03-24 17:56:13

不,它不会在二进制文件中。它甚至不会被编译--在编译之前,预处理器会将它扩展为一个空字符串,因此编译器甚至看不到它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2506632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档