Tag: c4127

当在“while” – C中使用常量时,为什么MSVC会生成警告C4127

对于代码, while(1) { /* ….. */ } MSVC生成以下警告。 warning C4127: conditional expression is constant 警告的MSDN页面建议for(;;)而不是while(1) 。 我想知道for(;;)有什么好处for(;;)以及为什么它会在while不断使用? 我应该在GCC上使用什么标志来获得相同的警告?

是’警告C4127`(条件表达式是不变的)有用吗?

回答这篇文章时,我建议对多行宏使用do {…} while(0) 。 在MSVC上,我发现此代码抛出: warning C4127: conditional expression is constant 为了使代码无警告,我需要选择以下丑陋的替代方案之一: 选项1 #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable:4127) #endif code_using_macro_that_generates_C4217; #ifdef _MSC_VER #pragma warning(pop) #endif 选项2 将我的宏定义为: #define MULTI_LINE_MACRO do { … } while(0,0) 要么 #define MULTI_LINE_MACRO do { … } while((void)0,0) 一些程序员也称为“猫头鹰”,因为(0,0)看起来像猫头鹰。 选项3 定义一个新的宏WHILE_0,它不会生成警告并使用它而不是while(0) 问题 我相信所有选择都或多或少可怕。 为什么MSVC会为看似正确的代码生成此警告,并激励我在代码中添加一些丑陋以保持代码警告免费? 我相信条件中的常量表达式是完全有效的,特别是在基于编译器优化代码的能力的构造中。 此外,我没有得到warning C4127的代码warning C4127 : void […]