#ifdef 如果拼写错误会有警告
#ifdef with warning if misspelled
我想使用预处理器指令来检查我是否必须包含我的程序的某些部分,如果我犯了错误或忘记包含包含选项的 header 警告我。请参阅以下示例,是否有更常见的方法仅使用 #if
和 #endif
?
class Foo
{
private:
# if ENABLE_MULTITHREADING == 1
boost::mutex mt;
# elif !defined(ENABLE_MULTITHREADING) // I would like to remove
# error // theses two lines
# endif
};
通常的方法是使用#error
。
#if ENABLE_MULTITHREADING != 1
# error ENABLE_MULTITHREADING needs to be 1
#endif
另请注意:您的支票看起来 非常 奇怪。在第一次检查中,您正在检查 ENABLE_MULTITHREADING
的值。在第二次检查中,您正在检查 ENABLE_MULTITHREADING
是否已定义。考虑当 ENABLE_MULTITHREADING
定义为 0
时会发生什么:您的 #if
和 #elif
的条件都不为真。
使用单一检查意味着出现此类不一致的可能性较小。
如果您实际上是想检查 ENABLE_MULTITHREADING
是否已定义,而不考虑其值,则
#ifndef ENABLE_MULTITHREADING
# error ENABLE_MULTITHREADING needs to be defined
#endif
但这不允许您使用单个检查:稍后您仍然需要检查 ENABLE_MULTITHREADING
的值。
如果您真正想要的 不是 对 ENABLE_MULTITHREADING
的检查,而是检查是否包含特定文件,那么我实际上会说你不应该使用 any 检查。只需包含特定文件。
预处理器通常不是一个好主意。只需为未启用多线程的情况创建一个存根。然后在声明中加入守卫。其余的代码会很好。
我想使用预处理器指令来检查我是否必须包含我的程序的某些部分,如果我犯了错误或忘记包含包含选项的 header 警告我。请参阅以下示例,是否有更常见的方法仅使用 #if
和 #endif
?
class Foo
{
private:
# if ENABLE_MULTITHREADING == 1
boost::mutex mt;
# elif !defined(ENABLE_MULTITHREADING) // I would like to remove
# error // theses two lines
# endif
};
通常的方法是使用#error
。
#if ENABLE_MULTITHREADING != 1
# error ENABLE_MULTITHREADING needs to be 1
#endif
另请注意:您的支票看起来 非常 奇怪。在第一次检查中,您正在检查 ENABLE_MULTITHREADING
的值。在第二次检查中,您正在检查 ENABLE_MULTITHREADING
是否已定义。考虑当 ENABLE_MULTITHREADING
定义为 0
时会发生什么:您的 #if
和 #elif
的条件都不为真。
使用单一检查意味着出现此类不一致的可能性较小。
如果您实际上是想检查 ENABLE_MULTITHREADING
是否已定义,而不考虑其值,则
#ifndef ENABLE_MULTITHREADING
# error ENABLE_MULTITHREADING needs to be defined
#endif
但这不允许您使用单个检查:稍后您仍然需要检查 ENABLE_MULTITHREADING
的值。
如果您真正想要的 不是 对 ENABLE_MULTITHREADING
的检查,而是检查是否包含特定文件,那么我实际上会说你不应该使用 any 检查。只需包含特定文件。
预处理器通常不是一个好主意。只需为未启用多线程的情况创建一个存根。然后在声明中加入守卫。其余的代码会很好。