コンパイラへの通知とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > コンパイラへの通知の意味・解説 

コンパイラへの通知

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/03/21 15:31 UTC 版)

関数プロトタイプ」の記事における「コンパイラへの通知」の解説

歴史的な経緯から、C89C90およびC95までのC言語では、関数事前に宣言されていない状況で、左括弧付きで式の中に現われ場合、その関数暗黙のうちに int返すものと判断され引数については何の想定なされない。この場合コンパイラは、引数の型やアリティコンパイル時にチェックできない。この暗黙の型指定仕様問題引き起こすケースがある。以下のコードは、暗黙宣言され場合関数振る舞い示したのである。 #include /* * もし、このプロトタイプ宣言があれば、コンパイラ関数呼び出し時の引数不一致エラーとして検出できる。 * しかしプロトタイプ省略され場合コンパイラint fac() であるとみなしてしまい、 * 実際関数引数仕様との不一致があってもコンパイルエラーにはならない。 * 結果的にプログラマ引数指定ミスに気づかず、プログラム実行時に未定義動作引き起こす。 */int fac(int n); /* プロトタイプ */int main(void) { /* 関数呼び出し */ printf("%d\n", fac()); /* ERROR: fac実引数がない */ return 0;}int fac(int n) { /* 呼び出される関数 */ if (n == 0) { return 1; } else { return n * fac(n - 1); }} 関数 "fac" が呼び出されたとき、コールスタックには1つ整数引数積まれていなければならないプロトタイプ省略されると、コンパイラはそれをチェックできず、実行時に "fac" がスタック上の何らかの値(あるいはレジスタにある何らかの値)を引数として使うことになる(スタック場合スコープにない変数の値かリターンアドレスを使うことになる)。実引数実際関数インタフェース一致していなかった場合未定義動作引き起こす戻り値に関しても同様で、例えば本来はvoid*を返すmalloc関数プロトタイプ宣言なしで呼び出そうとすると、int返す関数みなされてしまい、やはり未定義動作引き起こすC89では、関数プロトタイプ機能C++から逆輸入される形で標準化された。関数プロトタイプ使えばコンパイラ関数 "fac" が1つ整数引数をとることを知らせることができ、それによってコンパイラこのようなエラー検出できるうになる。 なお、関数の定義および宣言における戻り値の型指定省略した場合は、int仮定される。また関数の定義における引数の型指定省略した場合も、int仮定される。 /* 戻り値int 型で、引数未知 */fac(); /* 戻り値int 型で、引数 n は int 型 */fac(n) {...} 以上のように、プロトタイプ宣言なしで関数呼び出すコードや、戻り値の型指定省略したコードは、たとえ標準規格として適合であっても危険であるため、多くのCコンパイラ警告を出すようになっているC99では戻り値の型指定ない場合int仮定する仕様や、関数プロトタイプない場合戻り値int仮定する仕様標準規格文面から削除廃止)され、関数呼び出す前にプロトタイプ宣言必須となった。ただし、C99プロトタイプ宣言では依然として引数省略することもでき、例え前述の例では以下のようなプロトタイプ宣言でも適合するint fac(); /* 引数未知 */ 一方C++のほうはC++98として標準化され当初から完全なプロトタイプ宣言必須となっている。またC++では、引数省略した上記プロトタイプ宣言は、下記のように「引数無し」と等価であるとみなされるint fac(void); /* 引数無し */

※この「コンパイラへの通知」の解説は、「関数プロトタイプ」の解説の一部です。
「コンパイラへの通知」を含む「関数プロトタイプ」の記事については、「関数プロトタイプ」の概要を参照ください。

ウィキペディア小見出し辞書の「コンパイラへの通知」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「コンパイラへの通知」の関連用語

コンパイラへの通知のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



コンパイラへの通知のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの関数プロトタイプ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS