rph*_*rph 0 c++ c-preprocessor
是否可以使用预处理指令测试文件是否已包含在内?
我想实现这样的目标:
#ifincluded assert.h
#error "Should not include assert.h"
#endif
Run Code Online (Sandbox Code Playgroud)
目前,我知道assert.h已经定义了解决这个问题_ASSERT_H.在这种情况下,我可以使用#ifdef _ASSERT_H.问题是这是特定于实现的.
有没有更好的方法来实现这一目标?
你可以简单地利用它assert()本身就是一个宏的事实,所以你可以做一个
#ifdef assert
#error "Should not include assert.h"
#endif
Run Code Online (Sandbox Code Playgroud)
当然,如果有人定义他们自己的assert宏,这也会抱怨,严格来说,只要他们不包含任何标准标题,这将是合法的事情......
在一天结束时,我会重新考虑你认为你在这里尝试做的事情.如果您需要确保某人不包含特定的标准标题,那么您很可能走错了路线,如果您只是采取了一种方式,那么很可能会找到一种更好但完全不同的方法.退后一步,从一开始就重新思考.所以
有没有更好的方法来实现这一目标?
几乎可以确定.但它与检测和调整行为无关,具体取决于是否包含标准库的特定部分......