7 c++ gcc g++ visual-c++
是否可以在gcc/g ++或ms c ++中设置仅允许定义行为的标志?所以类似下面的内容给了我一个警告或最好是一个错误
func(a++, a, ++a)
Run Code Online (Sandbox Code Playgroud)
特定于标准中指定了未定义和未指定的行为,因为它可能会对实现造成不应有的负担,以诊断其所有示例(或者无法确定).
程序员应该注意避免那些未定义的区域.
对于您所陈述的示例,对于程序员来说,首先不要编写该代码应该是相当明显的.
话虽如此,g++ -Wall将会捕获一些不良代码,例如在非void函数中缺少返回以举一个例子.
编辑:@sehe还指出-Wsequence-point哪个将捕获这个精确的代码构造,尽管在每个参数的评估之间应该有一个序列点(但是未指定参数的评估顺序).
GNU C++有以下内容
-Wsequence-point
Warn about code that may have undefined semantics because of violations of sequence point rules in the C and C++ standards.
Run Code Online (Sandbox Code Playgroud)
这将正确标记您显示的调用
-Wstrict-overflow
-Wstrict-overflow
-fstrict-aliasing
-fstrict-overflow
Run Code Online (Sandbox Code Playgroud)
HTH