5

本着与诸如“x = ++x”之类的序列点相关的未定义行为的精神,它真的是未定义的吗?,如何让编译器抱怨这样的代码?

具体来说,我正在使用 Visual Studio 2010 和 Xcode 4.3.1,后者用于 OSX 应用程序,但都没有警告我这一点。我什至将 VS2010 上的警告调高为“全部”,它愉快地编译了这个。(作为记录,VS2010 的版本在变量中添加了 1,而 Xcode 的版本保持变量不变。)

4

1 回答 1

2

AFAIK,Visual Studio 不会检测到这种情况。而且我个人不相信这样做有什么意义。我会说,对于这样一个相当明显的案例的警告将主要具有教育价值,但没有太大的实际价值。在一般情况下,所讨论的问题发生在诸如*p = ++*q何时p并且q恰好指向同一个对象的情况下。不用说,编译器无法检测到它们。

于 2012-07-07T03:06:58.693 回答