Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。規格に準拠して関数はプロトタイプ宣言をするようにしましょう。プロトタイプ宣言がされている関数の引数については、それが正しい型であるか否かをコンパイラがチェックするので、引数の型の不整合をコンパイル時に検出できます。(n*factorial(n-1));}と書いてgccでコンパイルしたんですが、コンパイル時にエラーが出ませんでした。するのでしたら、その文献のタイトル等を記載すべきだと思います。編集して頂けませんでしょうか。票4関数の呼び出しについては規格-リンクはC11ドラフト-に次のように書かれています。(抜粋)私訳(あくまで参考に)もし呼び出された関数を表す式がプロトタイプを含む型を持つ場合、引数は、対応する仮引数の型に代入されたかのように暗黙に型変換されます。(int)x;のように暗黙に変換が行われるということです。ような場合、表現できる範囲が小さい方向に代入が行われるような場合には、オーバーフローする(可能性がある)など(未検証で書いてます)の警告が出る場合があります。doubleなどの場合も同じで、doubleを暗黙にintに変換した結果が引数として渡されます。いずれにせよ、(型の変換が行われて引数として渡されるので)型の不整合にはなりません。これは、要するに数値としての互換性があると見なしているからです。互換性のない型であるとか、キャストなしに(つまり暗黙に)ポインタから変換されたなどの警告(ウォーニング、警告であってエラーではありません。なくnoteになってました。個の銅バッジそれとは別にコンパイラが(明示的なキャストが無い場合の)そうした型の不一致を(質問者が言うような厳密に)報告するかどうかはコンパイラベンダ次第のような気がします。型が大きい方への変換であろうとも、暗黙の型変換ができるような場合は不整合と見なされず、エラーにならないという事ですか。型の不整合のチェックというのは結構アバウトなんですね。少なくともC規格上のCコンパイラの動作としては規定の動作であって、型のチェックを行い警告を出力しなければならないということはありません。5:16個人的な見解としては、歴史的にCはアセンブラのような(アセンブラには型チェックなどというものはないw)高級言語として、プログラマが概ねそのアセンブラ出力が予想できるようなチェックの甘い(それより効率優先な)言語として始まったように思います。現在のCコンパイラはそのような初期段階に比べて格段に良くなっていますが、それでも、Cではプログラマのしようとすることがエラー(プログラマが間違っている)とするより承認される方向で認識する方向であるように思います。5:22なるほど、良くも悪くもプログラマの裁量が(後の言語に比べて)大きいから、このような事になるのですね。件のコメントを表示3char→intとサイズを大きくする方向へは暗黙の型変換が認められているため特に警告されることはありません。型が大きい方への変換であろうとも、暗黙の型変換ができるような場合は不整合と見なされず、エラーにならないという事‌​ですか。型の不整合のチェックというのは結構アバウトなんですね。別質問でC言語にはバージョンがあることが紹介されていますが、この中で「最初のC」ではプロトタイプ宣言の中に引数情報が含まれておらず、「関数が存在する」ことしか宣言されていませんでした。この場合、コンパイラーは引数をどのように扱うか分からないわけですが、そこで呼び出し規約に従って処理されます。具体的には呼び出しの際、整数はintに拡張され、実数はdoubleに拡張されることが定められていました。呼び出された関数側としてもそのような引数しか受け取れないことになります。tekitou();と前者のようにプロトタイプ宣言の引数部にvoidを記述するのもこのためです。後者のようにvoidを省略してしまうと、引数が存在しないのか、古いソースコードで引数が明示されていないのか判別できなくなります。引数情報のないプロトタイプ宣言は古い概念ですが、現在においても可変引数をとる関数(の可変引数部分)については依然として引数情報が含まれていないため今なお有効な概念です。printf()にfloatを渡しても呼び出し規約によってdoubleに変換されているため%lfとフォーマット指定する必要があるのはこのためです。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。Expressを利用してコンパイル・実行したい1gtk+2.0のコンパイルができません。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。