[1020] Re:externについて
投稿者:774RR
2007/08/20 20:09:49
そういう約束だから
関数(原型)宣言に extern も static もない場合は extern が補われると考えよう
void myfunc(int); // これには extern も static も明示されてないので
extern void myfunc(int); // と解釈される規則
この規則は関数の場合にのみ適用されるので、変数宣言には適用されない
以下は、言語規格書の厳密解釈なので、一読してわからなかったらスキップしてね
・関数宣言で指定できる linkage は static か extern かどちらかだけ (無指定も OK)
・ static が明示されている関数宣言は internal linkage
・ internal linkage でない関数宣言は external linkage
ヘッダ中で宣言+ソースファイル中で定義することは完璧に正しい
----hoge.h----
void hogefunc(double); // This declaration has external linkage
----hoge.c----
#include "hoge.h"
void hogefunc(double d) { ... } // This definition also has external linkage
以下のような小細工コードをいまだに見るけど、現代 C/C++ であれば不要
#ifdef HOGE_DEFINITION
#define EXTERN
#else
#define EXTERN extern
#endif