[解決済み] 実際の関数定義と比較して)パラメータがない関数がコンパイルされるのはなぜですか?
質問
ある人のC言語のコードに出会ったのですが、なぜかコンパイルできてしまうので困っています。理解できない点が2つあります。
-
その 関数プロトタイプ は実際の関数定義と比較して、パラメータがありません。
-
のパラメータは 関数定義 が型を持っていない。
#include <stdio.h>
int func();
int func(param)
{
return param;
}
int main()
{
int bla = func(10);
printf("%d", bla);
}
なぜこれが動作するのでしょうか? いくつかのコンパイラでテストしてみましたが、問題なく動作しました。
どのように解決するのですか?
他の回答はすべて正しいのですが、唯一 完成
関数は次のように宣言されます。
return-type function-name(parameter-list,...) { body... }
リターンタイプ は、その関数が返す変数の型です。これは、配列型や関数型にはできません。 指定されない場合は、int が想定されます。 .
関数名 は関数の名前です。
パラメータリスト は、関数が受け取るパラメータのリストをカンマで区切ったものです。 パラメータが与えられていない場合、関数 は何も取らないので、空のセットで定義する必要があります。 括弧またはキーワード void で囲む。変数の型が前にない場合 を指定した場合,int型とみなされます。 . 配列と は関数に渡されず、自動的に変換されます。 をポインタに変換します。リストが省略記号(,...)で終了している場合、それは は、パラメータの数は設定されていません。注:ヘッダstdarg.hを使用することができます。 は、省略記号を使用した場合の引数へのアクセスに使用されます。
そして、念のためもう一度。 C11仕様6:11:6より (ページ: 179)
は 関数宣言子を空の括弧で囲んでしまう (ではない プロトタイプ形式のパラメータ型宣言子) は時代遅れです。 機能 .
関連
-
エラー: 宣言されていない識別子 'bool' の使用と C コンパイラでの問題点
-
[解決済み] c または c++ 用のシンプルな 2 次元クロスプラットフォームグラフィックスライブラリ?[クローズド]
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] mallocとcallocの違い?
-
[解決済み] 演算子 *, /, +, -, % を使わずに 3 で割る。
-
[解決済み] while ( !feof (file) ) 」は、なぜいつも間違っているのですか?
-
[解決済み] printfは、フォーマット文字列の中に改行がないと、呼び出し後にフラッシュしないのはなぜですか?
-
[解決済み] printfにおけるdoubleの正しい書式指定子
-
[解決済み] 2次元配列の反復処理において、ループの順序がパフォーマンスに影響するのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ポインタ定数および定数ポインタ
-
error: 'for' loop initial declaration is only allowed in C99 mode 原因と解決方法
-
エラー: 宣言されていない識別子 'bool' の使用と C コンパイラでの問題点
-
警告:符号付き整数式と符号なし整数式の比較 [-Wsign-compare]
-
警告: 'struct XXX' はパラメータリストの内部で宣言されています。
-
[解決済み] "static const" vs "#define" vs "enum"
-
[解決済み] Cコードの単体テスト【終了しました
-
[解決済み] C言語でのブーリアン値の使用
-
[解決済み] char s[]とchar *sの違いは何ですか?
-
[解決済み] なぜ16進数には0xがつくのですか?