在编译/链接时,#ifdef和#endif中的无法访问的代码是否被删除?

时间:2011-03-21 15:13:59

标签: c++ c

#ifdef和#endif中的无法访问的代码是否在编译/链接时被删除,或者保存在可执行文件中,即使它无法访问?

#ifdef DEBUG
// some debug operations
#endif

编译之后是否仍然保留调试操作代码而没有DEBUG标志,如果它会影响发布版本的性能吗?

编辑:

如果某些模块仅在调试操作中使用,并且如果它被链接到程序中,这会影响性能吗?

2 个答案:

答案 0 :(得分:11)

预处理器将完全删除此类代码 - 编译器甚至无法看到它。

你可以,例如使用g++ -E来查看预处理器的功能,以及编译器可以看到的内容。

答案 1 :(得分:1)

它被预处理器删除(使用外部预处理器,空行通常被替换)。