• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:関数の戻り値がextern)

関数の戻り値とexternについての質問

このQ&Aのポイント
  • C言語で他人のプログラムを見ながら勉強をしています。関数の戻り値がexternとなっている場合、戻り値は外部変数として扱われるのでしょうか?また、(4)で自動変数のswが戻り値となっている理由について教えてください。
  • (3)のbbb()関数には戻り値がvoidではないにも関わらず、return文が存在しない理由について教えてください。
  • 質問自体が変なものではないか心配ですが、初心者として教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

A.1 違います。 「『char aaa()』という関数が外部で定義されている」という意味です。 例えば、 bbb.c ---- #include "abc.h" void ccc(){ aaa(); } ---- として、 cc abc.c bbb.c などとコンパイルすれば、 abc.cで定義された関数をbbb.cで使うことができます。 この仕組みは、知らないうちに普段から使っています。 例えば、printfですが、正確にはC言語でなく、「標準ライブラリ」という、既のコンパイル済みのプログラムを利用しているものです。printfが使えることを知らせるために、stdio.h の中には extern printf( .. というような記述があります(実際には、そこからさらに#includeされたファイルに記述されていたり、前後に他の記述が付いていることもありますが) 詳細は「分割コンパイル」で検索するとよいでしょう。 A.2 ・単なる間違い ・void型の無い処理系、なかったころの古いソースコード ・もとの作者がvoid型を知らない あたりが考えられます。 エラーではありませんし、void関数として利用してもとりあえずは動作します。 が、最近の一般的なコンパイラでは警告が出るはずです。 なにかを返すのが正しいのか、voidにするのが正しいのかは仕様書やソースコードから判断してください。

Kuma2000
質問者

お礼

回答ありがとうございます。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

これ, 実際のプログラムでしょうか. もしそうなら Q2 は「ただ単に書き忘れただけ」でしょう. void がない時代とかそ~いうソースならそもそも char など書かないでしょうし, void を知らない人間が書いた場合もほぼ同様だと思う....

Kuma2000
質問者

お礼

回答ありがとうございます。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

>Q1. >(1)(2)は戻り値が外部変数ということでよいのでしょうか? >YESとすれば(4)で自動変数のswが戻り値になっているのは何故でしょうか? 関数が外部参照と言う意味です。 なので(4)は説明できますね。 まぁ値を入れずに戻しても意味無いですけどね。 >Q2. >(3)のbbb()では戻り値がvoidではないのに >return文がないのは何故でしょうか? return文がないのはマズイです。普通は警告が出るはずですが。

Kuma2000
質問者

お礼

回答ありがとうございます。

関連するQ&A