4

私はXcodeをいじくり回していたところ、次のステートメントがコンパイルされ、エラーはもちろんのこと、警告も発生しないことがわかりました。

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

どうしたの?これはそれを超DUPER静的にしますか?:)

冗談はさておき、なぜコンパイラは静的修飾子の繰り返しを許可するのですか?人々がこれを行うことを許可する理由は実際にありますか、それともコンパイラを書いた人々はこれをエラーにするのに怠惰でしたか?

4

2 に答える 2

5

私はObjective-C開発者ではありませんが、言語では修飾子の任意の順序(静的揮発性外部変数など)を使用できますか?もしそうなら、それはおそらくコンパイラの良性のバグであり、修飾子(staticこの場合は "")を読み取った後、修飾子端末を再び受け入れる状態に戻り、変数の型に遭遇するまでそれを行います。継続的staticな宣言は以前の修飾子と矛盾しないため、エラーは発生しません。だからこれに基づいて私volatile volatile volatile int x;も働くことを期待します。

于 2012-08-15T21:45:45.547 に答える
2

C 2011の場合、以下が適用されます。

セクション6.7.1パラグラフ2

_Thread_localstaticまたはexternで表示される場合を除いて、宣言の宣言指定子には最大で1つのストレージクラス指定子を指定できます。

また、ストレージクラス指定子は次のように定義されます。

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

したがって、C 2011の場合、それは違法であるはずです。


Objective Cに関しては、言語仕様がどこにあるのかわからないので、そこではお手伝いできません。

于 2012-08-15T22:29:14.453 に答える