私は C 言語が初めてで、 main 関数の先頭に含めることができるユニバーサル ヘッダーがあるかどうか疑問に思っていました。Java では、Eclipse で ctrl+shift+o を実行するだけで簡単にパッケージをインポートできます。しかし、Cでは、毎回グーグルして追加する必要があります。ときどき、どのライブラリを含めるかさえわからないことがあります。どうもありがとうございました 。
7 に答える
ユニバーサル ヘッダーはありませんが、アプリケーション用にヘッダーを作成して、すべてのファイルに含めることができます。呼び出す必要がある関数に含めるファイルがわからない場合は、man
UNIX でコマンドを使用できます。例えば、
man 3 printf
これを示します:
あらすじ
#include <stdio.h> int printf(const char * restrict format, ...);
十分な時間使い続けると、通常、関数のヘッダーへの「マッピング」を比較的早く覚えることができます。
すべてを網羅する単一のヘッダーはありません。
他のすべての点を除けば、MS Windows のそのようなヘッダーは Unix では正しくなく、Unix のそのようなヘッダーは Windows では正しくありません。Unix でも、ユニバーサル ヘッダーにすべての X11 ヘッダーを含める必要がありますか? OpenSSL ヘッダーはどうですか? POSIX スレッドのヘッダーはどうですか? 他の POSIX ヘッダー?
使用する必要のある特定の機能に関する情報を見つけるには、どこに行けばよいかを知る必要があります。Unix では、従来のリソースは「マニュアル ページ」(「マニュアル ページ」を意味し、通常は「-man
」 troff/nroff マクロ パッケージでフォーマットされています) でした。最近では、Web を使用する傾向があります。たとえば、The Open Group でPOSIXの man ページを見つけます。
(ヘッダーはライブラリとは別のものであることに注意してください。単一のライブラリ内の関数によって使用されるヘッダーが多数ある場合があります。図として標準 C ライブラリを参照してください。)
ユニバーサルヘッダーはありません。すべてのヘッダーの解析には時間がかかり、数千 (数百万ではないにしても) のヘッダーが利用可能であるため、それらすべてをすべてのコンパイル ユニットに含める方法はありません。それらの 99.9% は使用されず、静的な割り当てで最後の実行可能ファイルを不必要に肥大化させるだけなので、そうしたくないでしょう。
すべての標準化された関数は、そのマンページの上部に含める必要があるヘッダーを示します。たとえば、次からmalloc(3)
:
NAME
calloc, malloc, free, realloc - Allocate and free dynamic
memory
SYNOPSIS
#include <stdlib.h>
void *calloc(size_t nmemb, size_t size);
void *malloc(size_t size);
void free(void *ptr);
void *realloc(void *ptr, size_t size);
したがって、プロジェクトで必要#include <stdlib.h>
であり、参照用のプロトタイプがあります。
マンページをすばやく表示する方法が必要な場合は、すぐに表示されるように IDE を構成できます。Kinのデフォルトのキーバインディングはvim
、カーソルの下にある関数のマンページをロードすることですが、デフォルトのマンページ検索順序を使用するため、間違ったページを見つけることがあります。(printf
たとえば、 では、printf(1)
ではなくロードされますprintf(3)
。迷惑です。必要に応じて、MANSECT
で説明されている環境変数man(1)
を使用して、この動作を の3
前に表示するように変更でき1
ます。)
よく使用するさまざまなヘッダー ファイルを Eclipse に自動的に挿入させることができます。ただし、CI を学びたい場合は、どれを含めるかを見つける作業を行うことをお勧めします。
それはすべての学習と同じです。実践して学ぶ — 繰り返して学ぶ。
標準 C ライブラリはそれほど大きくありません。ヘッダー ファイルには直感的に名前が付けられ、管理しやすい標準関数のリストが含まれています。
このようなリストを用意して読んでください。インクルードなどが必要なときにお読みください。
いつ、何を含めるかを本当に知っていると感じたとき。それを自動化します。
ヘッダー ファイルで定義されたインターフェイスを使用しているため、ヘッダー ファイルをインクルードしています。含める標準セットがあるからではありません。では、必要なインターフェースをどのように判断するのでしょうか? 2 つの基本的なオプションがあります。
- ヘッダー ファイルまたはヘッダー ファイルの説明のいずれかを見つけて、それらを調べてインターフェイスを確認するか、または
- 「apropos search_term」または「man interface_function」を使用します。
初心者としては、オプション 1 から始めるのがよいでしょう。/usr/include
「The C Standard Library」(またはそれに類似したもの) という名前の本を調べるか、見つけてください。
いいえ。
作成できると思いますが、コンパイルがかなり遅くなります。一部の IDE は、インクルード ファイルの検索に役立つ場合があります。