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; と同じ程度にレアかもしれません。 回答をいただき、ありがとうございます。 よく解かりました。 すごく基本的なことを理解できていなかったのが、恥ずかしいです。 |