web-dev-qa-db-ja.com

#include <stdio.h>が実際にcプログラムで行うこと

私はcプログラミングが初めてで、「Hello world」スタイルの簡単なプログラムをコーディングしていました。

これらすべてのプログラムに#include<stdio.h>上部にありますが、これが正確に何を意味するのかわかりません。私はそれをグーグルで調べましたが、stdio.hはプリプロセッサ用のコマンドを含むファイルですが、プリプロセッサとは何ですか?コードを書くとき、それをコンパイルし、コードを「コンピューター」が読み取れる形式に変換してから実行できると考えました。誰かがこのコマンドの使用法を説明できますか?

19
yaylitzis

_stdio.h_ファイルを探し、この_#include_ステートメントの場所に効果的にコピーアンドペーストします。このファイルには、printf()scanf()、...などの関数のいわゆる関数プロトタイプが含まれているため、コンパイラーはパラメーターと戻り値を知ることができます。

32
Tibor

最も簡単な説明は、おそらく、プログラムが呼び出しするか、コードがプログラム自体の一部ではない多くの関数を使用することです。例えばコードに「printf」と書いて何かを出力すると、コンパイラはその呼び出しをどうするかわかりません。

stdio.hは、そのprintfの情報が存在する場所です。

更新:

むしろ、printf関数(名前、戻り値の型、パラメータ)のprototypeはstdio.hにあります。それはすべてコンパイル段階で必要です。 printfの実際のコードは、コンパイル後に行われるリンクフェーズに含まれます。

Includeステートメントは、基本的に、実際のコンパイルの前にすべての関数プロトタイプを挿入します。したがって、名前プリプロセッサ。

更新2:

質問はincludeステートメントに焦点を当てたため(OPは関数の定義を自分で書くことについても尋ねたので、別の重要な側面は、angular括弧に注意してください)

#include <stdio.h>

プリプロセッサは、それが標準ライブラリヘッダーであり、コンパイラがインストールされているシステムフォルダーを最初に調べることを想定しています。

代わりに、プログラマが自分で関数を定義し、.hファイルを現在の作業ディレクトリに配置する場合、彼は使用します(二重引用符に注意してください)

#include "stdio.h"

以下 はそれを示しており、動作はすべてのプラットフォームで移植可能です。

10
fayyazkl

ソースコード内のプリプロセッサディレクティブは、プログラムのコンパイル前に処理されるステートメントです。このステップの後、ソースコードは、標準Cライブラリですでに定義されている関数への参照を含むため、拡張ソースコードに変換されます(または他の)printf、scanf、putw、getcharなど。stdio.hは、cで使用される標準入出力関数のプロトタイプ(定義ではなく)を含む「.h」拡張子を持つファイルです。

0
coco97

これは、glibc(または入手した標準Cライブラリ)の一部を表すファイルsdtio.hの関数、構造、マクロなどを使用するようコンパイラーに指示します。コンパイラは、出力実行可能ファイル「to-link list」にレコードを追加します。これは、スタンダートCライブラリにリンクする必要があります。

0
wirm