相关疑难解决方法(0)

条件表达式中的常量值

关于无限循环编码风格问题中,有些人提到他们更喜欢for(;;)样式,因为while(true)样式在MSVC上给出关于条件表达式是常量的警告消息.

这让我感到非常惊讶,因为在条件表达式中使用常量值是避免#ifdef地狱的有用方法.例如,您可以在标题中:

#ifdef CONFIG_FOO
extern int foo_enabled;
#else
#define foo_enabled 0
#endif
Run Code Online (Sandbox Code Playgroud)

代码可以简单地使用条件并信任编译器在未定义CONFIG_FOO时删除死代码:

if (foo_enabled) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

每次使用foo_enabled时,不必测试CONFIG_FOO:

#ifdef CONFIG_FOO
if (foo_enabled) {
    ...
}
#endif
Run Code Online (Sandbox Code Playgroud)

这种设计模式一直在Linux内核中使用(例如,include/linux/cpumask.h在禁用SMP时将几个宏定义为1或0,在启用SMP时定义为函数调用).

MSVC警告的原因是什么?另外,有没有更好的方法来避免#ifdef hell而不必禁用该警告?或者这是一个过于广泛的警告,一般不应该启用?

c c++ warnings visual-c++

8
推荐指数
2
解决办法
4900
查看次数

标签 统计

c ×1

c++ ×1

visual-c++ ×1

warnings ×1