我只是在 Xcode 中闲逛,我发现以下语句可以编译,它甚至不会引发警告,更不用说错误了:
static static static int static long static var[5];
那是怎么回事?这是否使它成为超级 DUPER 静态的?:)
除了开玩笑,为什么编译器允许重复静态修饰符?实际上是否有理由允许人们这样做,或者编写编译器的人懒得让它引发错误?
我只是在 Xcode 中闲逛,我发现以下语句可以编译,它甚至不会引发警告,更不用说错误了:
static static static int static long static var[5];
那是怎么回事?这是否使它成为超级 DUPER 静态的?:)
除了开玩笑,为什么编译器允许重复静态修饰符?实际上是否有理由允许人们这样做,或者编写编译器的人懒得让它引发错误?
我不是 Objective-C 开发人员,但该语言是否允许对修饰符进行任意排序(例如 static volatile extern)?如果是这样,那么它可能是编译器中的一个良性错误,在读取修饰符(static
在本例中为“”)后返回到它再次接受任何修饰符终端的状态,并且会一直这样做,直到它遇到变量的类型。连续static
声明不会与任何先前的修饰符相矛盾,因此不会引发任何错误;所以基于此,我希望volatile volatile volatile int x;
也能工作。
对于 C 2011,以下适用:
第 6.7.1 节第 2 段
最多可以在声明中的声明说明符中给出一个存储类说明符,除非它
_Thread_local
可能与 static 或 extern 一起出现。
存储类说明符定义为:
storage-class-specifier:
typedef
extern
static
_Thread_local
auto
register
所以对于 C 2011,这应该是非法的。
至于Objective C,我不知道在哪里可以找到语言规范,所以我无法帮助你。