2017-07-27 6 views
2

私はプログラミングのノブです。 私の先生はプリプロセッサディレクティブを一切使わずにプログラムをコンパイルし、出力を実行して表示しました。 ちょうどこんにちは世界のプログラムでした。 "printf"機能をどのように実行できたかは、指示文がないと混乱します。プログラムはヘッダファイルなしでコンパイルして実行します。turbo C++

+0

なぜですか?プリプロセッサに必要なもの実際のコンパイル段階では、プリプロセッサのものを使わずにファイルをコンパイルします –

+0

'printf'?だから先生は実際に 'printf'を使いました。 – AnT

答えて

3

"古典的" ANSI C(C89/90)では、適切な型の引数を指定することを念頭に置いている限り、事前宣言なしで非可変関数を呼び出すことができます。したがって、すべてが適切に処理されれば、標準ヘッダーを含まない正式に有効なC89/90プログラムを書くことができます。例えば。 C99から始まるすべての関数が呼び出される前に宣言する必要があるため、可能ではない現代のCで

int main() 
{ 
    puts("Hello World"); 
    return 0; 
} 

printfは、(プロトタイプを使用して)事前宣言せずに呼び出すと、printfが可変関数であるため、C89/90でも未定義の動作が発生しました。あなたの先生はその

int main() 
{ 
    printf("Hello World\n"); 
    return 0; 
} 

のような何かをしたのであれば、その後、彼/彼女はまだC.このC89/90プログラムについて学ぶためにたくさん持っていることは、それは、コンパイルを実行し、「見えた出力を表示した場合でも、有効ではありませんあなたに "良い"。

しかし、あなたはまだ手動で機能をあらかじめ宣言することができ

​int printf(const char *format, ...);​ 

int main() 
{ 
    printf("Hello World\n"); 
    return 0; 
} 

と任意の前処理指令を使用していない有効なC89/90プログラムで終わります。そのようにするのは、良いプログラミングの練習ではありません。

+0

TurboC++で "puts"コードを試しましたが、putsにプロトタイプが必要であるというエラーが表示されます。 –

+0

@AlphaMineronまず、C++ではなく、Cとしてコードをコンパイルしていることを確認する必要があります。第二に、それは "古い" C - C89/90でなければなりません。 – AnT

+0

ああ、私は参照してください............ –

関連する問題