時代の関数定義/宣言との互換を保つためのもののようです。実はC言語には標準化以前の頃からの伝統的な関数定義/宣言の方法が今でも残されています。スタイルの関数定義/宣言なんて呼ばれていたりするようです。このスタイルでは以下のようにして関数を定義します。b;}このように、関数名の後ろの括弧の中には仮引数の識別子だけを書いておき、関数本体の前に仮引数の型を宣言するという構文になっています。ソースコードを眺めていた時にこの書き方を見たことがあって「昔のC言語にはこんな書き方があったのか〜」なんて思っていたので、今でもこのスタイルの書き方が規格に定められていると知ってかなり驚きました。スタイルでは呼び出し側からは引数の情報が一切わかりません。型の引数を2つ受け取って、int型を返す関数」という具合に型が定められます。「引数については情報がなく、int型を返す関数」という風に型が定められます。後者ように定義された関数を呼び出す時、コンパイラは引数の数のチェックを行いません。以下のように呼び出してもエラーにはならないわけです。スタイルの関数定義とみなされます。例がエラーにならないのはこういう理由です。スタイルの関数宣言は関数名を書いてその後ろの空の括弧をおいておくという記法しか用意されていません。細かい話ですが、関数の定義と宣言は明確に違っていて、定義は関数本体を伴うもの、宣言は伴わないものです。当然ながらこの書き方ではコンパイラから見て引数の情報は一切わかりません。標準化以前はこのような関数定義/宣言しか存在しなかったのですが、標準化の際に現在も使われているような引数の型を明示する構文が導入されました。これがいわゆるプロトタイプ(関数原型)と呼ばれるものです。いう関数定義/宣言ですね。これによって関数呼び出しの際の型のチェックがより強力にできるようになりました。スタイルと同じ形になってしまいます。書くという記法が導入されました。導入された歴史的な経緯のようです。規格でもまだ廃止されずに残されています。互換性って大変ですね......まとめというわけで、引数の括弧が空の関数は古い形式の関数定義/宣言とみなされてしまい、呼び出し時の引数の数や型のチェックが行われません。書くのが安全という話でした。最終ドラフトを読み漁って書いたのですが、もしかしたら僕が勘違いしている箇所もあるかもしれないので、その辺りはご注意ください。読む限りだと、関数定義の時は関数宣言と挙動が違うという解釈もありえそうなのですが、今回は以下のツイートにあるような解釈をしてこの記事を書いています。スタイルで書かれている場合に警告を出してくれるようです。いう警告オプションもあるんですが、こちらは関数定義に対してしか警告を出してくれないようですね。(3)はてなブログをはじめよう!mizu0x19fさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。