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++中是可能的吗?
澄清这一点的一个简单方法是将实现放在另一个包含的文件中:
文件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)