Visual Studio 2010 で簡単な C プログラムを作成すると、 http://debugmode.net/2012/02/06/how-to-write-and-run-ac-program-in-visual-studio-2010/
「#include < stdio.h >」を削除します。
私のプログラムはまだ正常に実行されていますが、どうしてそれが可能なのか理解できませんでした?
どんな助けでも大歓迎です。よろしく、
Visual Studio 2010 で簡単な C プログラムを作成すると、 http://debugmode.net/2012/02/06/how-to-write-and-run-ac-program-in-visual-studio-2010/
「#include < stdio.h >」を削除します。
私のプログラムはまだ正常に実行されていますが、どうしてそれが可能なのか理解できませんでした?
どんな助けでも大歓迎です。よろしく、
stdio.h ヘッダーは、次のように宣言された関数を使用しない限り、厳密には必要ありません。
http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.12.html
コードをさらに見てみると、プロトタイプがない場合のデフォルトの動作は、 int 戻り値の型を想定し、この特定のケースで機能する引数の型からパラメーターの型を派生させることだと思います。しかし、これは一般的に悪い習慣であり、避けるべきです。
それが警告なしでコンパイラ/リンカーを通過した場合は、環境設定を確認することをお勧めします。ヘッダーを含めることを忘れがちで、気付かない場合、多くの意図しない副作用や追跡が困難な副作用を引き起こす可能性があります。
標準ヘッダー ファイルをインクルードする主な目的は、標準関数の宣言をソース ファイルにインクルードすることです。
ただし、元の標準 C 言語 (C89/90) では、呼び出される前に関数を宣言する必要はありませんでした (未定義の動作を避けるために、prototype で事前に宣言する必要がある可変引数関数は別として)。このため、非変数関数呼び出しについて話している限り、標準関数を事前に宣言しなくても、つまり標準ヘッダー ファイルをインクルードせずに、正しいプログラムを作成することは完全に可能です。
たとえば、strcmp
2 つの引数を指定して関数を呼び出すことchar *
は、C89/90 では事前宣言なしで完全に合法strcmp
です。一方、printf
プログラムを定義済みの動作を持つ有効な C プログラムのままにしたい場合は、prototype で事前に宣言する必要があります。
このヘッダー ファイルは、多くの一般的な関数とマクロのプロトタイプを提供します。
これらの関数やマクロを呼び出さない場合は、必要ありません。それらを呼び出しても、適切なライブラリとリンクしている限り、引き続き機能します。ただし、コンパイラにこれらの定義がない場合、コンパイラ エラーまたは警告が発生する可能性があります。