[解決済み] Printf がこのスコープで宣言されていない
質問
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言語におけるすべての識別子は、使用する前に宣言する必要があります。これは変数だけでなく、関数にも当てはまります。関数の場合は、その関数を最初に呼び出す前に宣言する必要があります。完全な宣言には、戻り値の型、引数の数および型が含まれます。これは、関数プロトタイプとも呼ばれます。
また、同じコンパイル単位で、関数を呼び出す前に定義することも可能です。あるいは、呼び出す前に宣言することもできます。この場合、関数の宣言を含むヘッダーファイルをインクルードするのがベターです(常にではありません)。
を読んで、新しい本を買うことを検討してください。著者はヘッダーファイルのインクルージョンについて言及すべきでした。
関連
-
[解決済み] Connect: ソケット以外でのソケット操作
-
[解決済み】警告:互換性のないポインタ型からの代入
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み】execvp: バッドアドレスエラー
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない
-
[解決済み】whileループの時間複雑性(Big O)はどうやったらわかるの?
-
[解決済み] error: `itoa` is not declared in this scope
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Valgrind - strcpyのサイズ1の無効な書き込み
-
[解決済み】「ポインタから異なるサイズの整数へのキャスト」エラーが発生するのはなぜですか?
-
[解決済み】警告:互換性のないポインタ型からの代入
-
[解決済み】"Expected expression before ' { ' token"(トークンの前に期待される式)。
-
[解決済み】警告。この関数ではXが初期化されていない状態で使用される可能性があります。
-
[解決済み】cudamalloc()の使用。) なぜダブルポインタなのか?
-
[解決済み】C言語で多重定義を防ぐには?
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み】未定義参照 makefile が間違っているのかも?
-
[解決済み】配列型char[]が代入できない [重複]。