4

我只是在 Xcode 中闲逛,我发现以下语句可以编译,它甚至不会引发警告,更不用说错误了:

static static static int static long static var[5];

那是怎么回事?这是否使它成为超级 DUPER 静态的?:)

除了开玩笑,为什么编译器允许重复静态修饰符?实际上是否有理由允许人们这样做,或者编写编译器的人懒得让它引发错误?

4

2 回答 2

5

我不是 Objective-C 开发人员,但该语言是否允许对修饰符进行任意排序(例如 static volatile extern)?如果是这样,那么它可能是编译器中的一个良性错误,在读取修饰符(static在本例中为“”)后返回到它再次接受任何修饰符终端的状态,并且会一直这样做,直到它遇到变量的类型。连续static声明不会与任何先前的修饰符相矛盾,因此不会引发任何错误;所以基于此,我希望volatile volatile volatile int x;也能工作。

于 2012-08-15T21:45:45.547 回答
2

对于 C 2011,以下适用:

第 6.7.1 节第 2 段

最多可以在声明中的声明说明符中给出一个存储类说明符,除非它_Thread_local可能与 static 或 extern 一起出现。

存储类说明符定义为:

storage-class-specifier:
          typedef 
          extern
          static
          _Thread_local
          auto
          register

所以对于 C 2011,这应该是非法的。


至于Objective C,我不知道在哪里可以找到语言规范,所以我无法帮助你。

于 2012-08-15T22:29:14.453 回答