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

Ato*_*ble 0 c c++

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

#ifdef DEBUG
// some debug operations
#endif
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

Eri*_*rik 11

预处理器将完全删除这些代码 - 编译器甚至无法看到它.

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