我有几个配置文件,每个配置文件都包含一些 bool 宏的定义,将其设置为0或1。然后,在我的代码中,我检查该宏的值来确定要激活代码的哪一部分。现在到了棘手的部分:我想确保已包含包含宏定义的 header 。

在下面的示例中,如果我忘记包含包含FOO定义的头文件,则编译器将打印“world!”,而我希望它生成一个错误。

//in the configuration header file
#define FOO 1

//in a cpp file
#if FOO  //I would like this to generate an error if I forgot to include the header file
#pragma message "Hello"
#else
#pragma message "world!"
#endif

是否有可能实现这种行为?怎么样?

为了澄清,我不是在问how to generate an error if a macro is not defined,但是是否可以转换#if FOO行,以便同时检查 bool 值并在未定义FOO的情况下产生错误。

这样做的目的是使开发人员知道他们的代码应包含
SPECIAL_MACRO(FOO)

同时检查FOO的 bool 值,就好像它是#if FOO语句一样,并防止它们忘记包含定义FOO的 header 。

最佳答案

维护大型代码库并使用#define进行广泛配置的同事(hi Hartmut,Kurt)遇到了同样的问题。一个简单的拼写错误(可能在make文件中)可能会导致难以发现的细微错误。他们的解决方案:使用函数宏!

#if SOME_COND()
 // ...
#endif

编译器会提示是否未定义SOME_COND(),而不是简单的SOME_COND;如果未定义,它将被0替换。我喜欢它,因为它可用于传输多个值,而不会因附加的#ifdef导致代码困惑。

关于c++ - 如果未定义检查的 bool 宏,则生成错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33759787/

10-11 22:38
查看更多