有没有办法指示C++编译器跳过当前文件的其余部分?

sha*_*oth 2 c++ compiler-construction visual-c++ c-preprocessor

偶尔有些功能必须有条件地编译.例如,class Logger仅在WITH_LOGGING宏为#defined时使用:

// Logger.cpp
#ifdef WITH_LOGGING
#include <Logger.h>
// several hundred lines
// of class Logger
// implementation
// follows
#endif
Run Code Online (Sandbox Code Playgroud)

这不是很方便 - 除非读者滚动浏览文件,否则无法确定匹配#endif是否位于文件末尾,因此整个文件内容被排除在外#ifdef.我希望有这样的事情:

// Logger.cpp
#ifndef WITH_LOGGING
#GetOutOfThisFile
#endif
#include <Logger.h>
// several hundred lines
// of class Logger
// implementation
// follows
Run Code Online (Sandbox Code Playgroud)

所以很明显,一旦WITH_LOGGING不是#defined,编译器就会跳过文件的其余部分.

这样的东西在C++中是可能的吗?

wal*_*lyk 8

澄清这一点的一个简单方法是将实现放在另一个包含的文件中:

文件Logger.cpp:

#ifdef WITH_LOGGING
 #include <Logger.h>
 #include "logger.impl"
#endif
Run Code Online (Sandbox Code Playgroud)

file logger.impl:

// several hundred lines
// of class Logger
// implementation
// follows
Run Code Online (Sandbox Code Playgroud)

  • @in silco:```必须是一行中的第一个非空白字符.缩进*大大*提高了预处理控件以及嵌套数据和代码的可读性. (3认同)