この記事extern int (x)[]
の最後に宣言があります。括弧は何かをしているのですか、それとも混乱のためだけですか?
私の推測では、括弧x
を使用すると外部整数の配列になります (そして、それが記事に記載されていることです) が、括弧を使用しないx
と整数の外部配列になります。これが本当なら、定義はどのように異なりますか? 両方ともそうではないでしょうint x[]
か?
この記事extern int (x)[]
の最後に宣言があります。括弧は何かをしているのですか、それとも混乱のためだけですか?
私の推測では、括弧x
を使用すると外部整数の配列になります (そして、それが記事に記載されていることです) が、括弧を使用しないx
と整数の外部配列になります。これが本当なら、定義はどのように異なりますか? 両方ともそうではないでしょうint x[]
か?
いいえ、親はそこで何もしていません。リンク先の記事では、その理由を説明しています。
2 つを区別する最も簡単な方法は、型指定子の配置を確認することです。型指定子が左括弧の直後にある場合、その括弧は関数記述子の開始であり、型は関数パラメーターの一部です。空の括弧も関数を意味します。それ以外の場合、括弧は式をグループ化しています (おそらく不必要ですが、少なすぎるよりは多すぎる方がよいでしょう)。
また、「外部 int の配列」と「int の外部配列」はまったく同じものであることに注意してください。「extern-ness」は常に、宣言されているオブジェクト (この場合は配列) になります。個人的には、それを説明する最初の方法は技術的に不正確であり、単に混乱していると思います.
その場合、括弧は重要ではありません。通常、すべての演算子が異なるレベルのバインディングを持っているため、関数ポインターまたはより強いバインディングをマークするために括弧を使用します。
キーワードはextern
、これが単なる宣言であることを示していますが、この配列の実際の定義は別の場所で行われます。