2

私は C が初めてで、誰かのコードを保守しています。ヘッダーファイルでこれに出くわしました。ソースが Windows でコンパイルされている場合は if ステートメントに入り、コードが Linux でコンパイルされている場合は else ステートメントに入ることがわかります。私が間違っている場合は修正してください。

ただし、問題は、なぜすべてのインクルード ヘッダーの前に # (ハッシュ) を使用するのかということです。

ご提案いただきありがとうございます。

#ifdef WIN32
#   include <conio.h>
#   include <process.h>
#   include <stdlib.h>
#   include <string.h>
#else
#   include <unistd.h>
#   include <termio.h>
#   include <sys/types.h>
#   include <sys/stat.h>
#   include <fcntl.h>
#endif
4

6 に答える 6

8

ハッシュ (#) は、プリプロセッサ ディレクティブを示します。プリプロセッサはコンパイル前にコードを実行し、「#」で始まるすべての行に応じて処理を行います。「#include filename.h」ディレクティブは、基本的に filename.h のすべての内容をコピーし、「#include filename.h」行があった場所に貼り付けます。

于 2009-07-21T03:04:15.333 に答える
7

#includeは、C でファイルをインクルードする方法です。

# と include の間のスペースに混乱するかもしれません。

しかし、それらは問題ではありません。これらの行はまだ #include です。

于 2009-07-21T03:05:34.833 に答える
3

「#include」は、ヘッダーを含めるようにプリプロセッサに指示するための構文であるためです。ポンドの後のスペースは書式設定のためだけにあり、厳密には必要ありません。

于 2009-07-21T03:04:05.133 に答える
3

# 行は、実際には C コンパイラ自体ではなく、コンパイル パイプラインの初期段階で実行されるプリプロセッサによって処理されます。「#」は、どの行を担当しているかを知る方法です。

同じプリプロセッサを他のコンテキストでも使用できます。

プリプロセッサは、#ifand#ifdef句のように式の評価を行うだけでなく、他のファイルを開いて挿入することも、句を使用#includeしてテキスト置換を行うこともできます#define

詳細については、ウィキペディアのC プリプロセッサに関するエントリを参照してください。

#includeImportsたとえば、VB.Netステートメントや C#ステートメントとは異なりusingます。これらは他のクラスへの参照#includeを作成しますが、実際にはインクルード ファイルのテキストをソース ファイルのその場所に挿入します。また、再帰的に動作できるため、含まれるファイル自体#includeが他のファイルになる場合があります。

于 2009-07-21T03:04:35.740 に答える
1

#include ディレクティブは、指定されたファイルの内容を、ディレクティブが出現する時点でソース プログラムに出現したかのように処理するようにプリプロセッサに指示します。

http://msdn.microsoft.com/en-us/library/36k2cdd4(VS.80).aspx

于 2009-07-21T03:04:15.537 に答える
1

includeifdefなどはすべてプリプロセッサ ディレクティブであるため、前にシャープ (またはハッシュ) 文字を付ける必要があります。このコードを書いたコーダーは、単純#に左側にすべての文字を並べて、コードをきれいに見せました (彼の意見では)。

cplusplus.com には、プリプロセッサ ディレクティブの概要が掲載されています。

于 2009-07-21T03:05:05.257 に答える