C言語関係掲示板

過去ログ

No.1161 関数実体の前のextern宣言

[戻る] [ホームページ]
No.15079

関数実体の前のextern宣言
投稿者---Mr.Boo(2004/06/30 16:05:29)


初めてポストします、Mr.Booと申します。
C言語はもう結構(ANSI以前から)使っているのですが、仕事で改造するソースを解析していたところ、よくわからない構文にぶつかってしまいました。

extern宣言なのですが、関数の実体前に関数自身の宣言に使用されています。
このような場合、extern宣言の意味をお教えください。

−−−−−−−−−− ここから −−−−−−−−−−
extern char func1( char *name)
{
:
:
:
関数の実処理
:
:
}

−−−−−−−−−− ここまで −−−−−−−−−−

この関数は、AAA.cファイルで実体が記述され、BBB.cでコールされています。
ヘッダファイルにもextern宣言されています。

開発環境はVisual C++ Ver6.0です。

宜しくお願いいたします。



No.15082

Re:関数実体の前のextern宣言
投稿者---tetrapod(2004/06/30 17:06:37)


# 関数宣言と関数定義の違いの認識は大丈夫ですか?

関数定義に対して extern を用いた場合は、外部結合を持つことを意味します。
外部結合=他の翻訳単位(ソースファイル)で使える、ってこと。
関数定義の extern は省略時解釈(デフォルト)です。
# 既に static であると宣言されている場合を除く。

つまり、ふつーに
int func(int x) { ... }
と書くことは、実は
extern int func(int x) { ... }
の手抜き形であり、両者はまったく同一の意味を持ちます。

関数定義で extern を明示するのはあまりやらないですね。
auto int x; と同じ程度にレアかもしれません。



No.15084

Re:関数実体の前のextern宣言
投稿者---Mr.Boo(2004/06/30 17:31:51)


>つまり、ふつーに
>int func(int x) { ... }
>と書くことは、実は
>extern int func(int x) { ... }
>の手抜き形であり、両者はまったく同一の意味を持ちます。
>
>関数定義で extern を明示するのはあまりやらないですね。
>auto int x; と同じ程度にレアかもしれません。

回答をいただき、ありがとうございます。
よく解かりました。
すごく基本的なことを理解できていなかったのが、恥ずかしいです。