[208] Re:C言語ポインタ完全制覇についての質問
投稿者:774RR
2007/02/20 02:13:25
C 規格書はウチに帰らないと無いのでアレげですが
C++ 規格書であれば 「JIS X3014:1998-3.3.2 局所的な有効範囲」で、
ブロック内に宣言された名前はそのブロックに局所的である。
と書かれています。実際以下のコードはコンパイルエラーです。
---hoge.cpp---
int func1(void) {
extern int piyo(void);
return piyo();
}
int func2(void) {
return piyo();
}
---EOF of hoge.cpp---
んで、上記を hoge.c とした場合の挙動ですが
bash-3.0$ hppa2.0w-hp-hpux11.00-gcc-3.3.4 -Wall -c hoge.c
hoge.c: In function `func2':
hoge.c:7: warning: implicit declaration of function `piyo'
Microsoft Visual C++ 6.0SP6 だと
cl -W4 -c hoge.c
hoge.c(2) : warning C4210: 非標準の拡張機能が使用されています : 関数にはファイル スコープが与えられています。
hoge.c(7) : warning C4217: 非標準の拡張機能が使用されています : 以前のブロックでの関数宣言です。
となりました。
やはり言語規格がスコープ詳細等を定めていないようです。
# IE6 でも Acrobat Reader を uninstall してから JIS 閲覧するとゲフガフ
# って検索が効かない文書なので、むりくり保存してもあまり役に立たない鴨。