1. ホーム
  2. c

[解決済み] Printf がこのスコープで宣言されていない

2022-02-18 16:41:49

質問

C言語を学び始めたところですが、参考にした本の最初のプログラムでは、次のようなエラーが発生します。

printfはこのスコープで宣言されていません。

私は本に書かれている通りにコードを入力しています。それでもエラーが出ます。

解決方法は?

の宣言がコンパイラに見つかりませんでした。 printf 関数があります。そのため、コンパイルエラーが表示されます。

の正しい宣言(ISO/IEC 9899:1999)は以下の通りです。 printf 関数は

int printf(const char * restrictformat, ... );

上記のように関数を宣言してから呼び出すか、あるいは、関数の中に header file は、その関数の宣言を含んでいます。 しかし、関数の宣言を含むヘッダーファイルだけをインクルードするのが最も簡単で安全です ( #include <stdio.h> に対して printf ).

なぜ、関数を呼び出す前に宣言をしなければならないかについては、次のようなものがあります。 質問 . その説明は以下の通りです。

プログラミング言語Cは、コンパイラがワンパスコンパイラとして実装できるように設計されている。このようなコンパイラでは、各コンパイル段階は一度だけ実行される。このようなコンパイラでは、ソースファイルの中で後から定義された実体を参照することはできません。

さらに、C言語では、コンパイラは一度に1つのコンパイル単位(一般に.cファイルと含まれるすべての.hファイル)しか解釈しません。そのため、別のコンパイル単位で定義された関数を参照する仕組みが必要だった。C言語におけるすべての識別子は、使用する前に宣言する必要があります。これは変数だけでなく、関数にも当てはまります。関数の場合は、その関数を最初に呼び出す前に宣言する必要があります。完全な宣言には、戻り値の型、引数の数および型が含まれます。これは、関数プロトタイプとも呼ばれます。

また、同じコンパイル単位で、関数を呼び出す前に定義することも可能です。あるいは、呼び出す前に宣言することもできます。この場合、関数の宣言を含むヘッダーファイルをインクルードするのがベターです(常にではありません)。

を読んで、新しい本を買うことを検討してください。著者はヘッダーファイルのインクルージョンについて言及すべきでした。