規格
2009年07月27日
C の規格に関するちょっとした話です。
今まで、extern が付いていない最上位宣言での変数宣言(グローバル変数)は、全て定義宣言になるのだと思っていたのですが、厳密には異なるそうです。
(1) と (2) は、単に初期値が与えられているかいないかだけの違いで、どちらも定義に見えます。
ところが、厳密には (2) だけが定義宣言で、(1) は仮定義という扱いになるのだそうです。続きを読む
今まで、extern が付いていない最上位宣言での変数宣言(グローバル変数)は、全て定義宣言になるのだと思っていたのですが、厳密には異なるそうです。
int x; /* (1) */
int y = 0; /* (2) */
extern int x; /* (3) */
(1) と (2) は、単に初期値が与えられているかいないかだけの違いで、どちらも定義に見えます。
ところが、厳密には (2) だけが定義宣言で、(1) は仮定義という扱いになるのだそうです。続きを読む