1

我无意中编译了以下语句:

manager.groupName - lastGroupName;

代替:

manager.groupName = lastGroupName;

我试图理解为什么编译器甚至没有为我无意中提供的前一条语句提供警告。该语句没有任何效果,即使将指针彼此相减也是合法的。

groupName 和 lastGroupName 都属于 (NSString *) 类型。groupName 属性声明为:

@property (nonatomic, retain) NSString *groupName;

想知道我是否应该访问 bugreporter,或者是否有 XCode 不提供诊断的原因。

4

4 回答 4

5

这是 C 中的合法声明,因此在 Objective-C 中也是如此,因此编译器不必对此发出警告。您可以将警告标志添加-Wunused-value到编译器设置中。这会警告这样没有效果的语句。

通常有很多标志告诉编译器究竟要警告什么。每个人都有不同的想法,什么是可以的,什么应该被警告。如果编译器发出太多警告,它们就会变得毫无用处。

Also note that clang does indeed produce better warning and error messages it doesn’t mean that it will automatically produce more warnings. It also has the same flags for enabling and disabling certain warnings that gcc has.

于 2010-09-20T18:03:43.900 回答
0

XCode 没有最好的语法检查,尽管它应该在即将发布的版本中更好(我相信 4.0,现在是 beta 版)。

于 2010-09-20T17:53:03.430 回答
0

注册开发人员可以下载 XCode 4 beta,它改进了“clang”2.0 前端的语法检查。现在,您可以通过选择带有 clang 1.5 而不是 GCC 作为编译器的“llvm”来获得其中的一些。Apple 目前的推荐是 GCC 前端和 LLVM 1.5 后端,但是你仍然会被 GCC 可怕的错误信息所困扰。

我建议下载 XCode 4 并在上面尝试代码。您可能会发现一些重要的错误,您可以在 XCode 3 发布之前返回并修复这些错误。

另外,定期做一次“Clean All”和“Compile and Analyze”会发现很多常见的错误。强烈推荐,特别是如果你被困在某事上。

于 2010-09-20T17:58:01.033 回答
0

这是合法的语法,所以应该不会出错。它看起来确实没用,高质量的编译器可能会发出警告。

在运行时,结果是另一回事。除非我记错了这是未定义的行为,除非两个指针相同或至少指向同一个数组。

于 2010-09-20T17:58:20.570 回答