2009-07-21 11 views
1

私はC言語を新しくしていて、someonesコードを維持しています。私はヘッダーファイルでこれを見つけました。私はソースがウィンドウ上でコンパイルされている場合は、ifステートメントを入力することを理解することができます。コードがLinux上でコンパイルされている場合は、elseステートメントを入力します。私が間違っているなら、私を訂正してください。#ifdef #else #endifマクロ質問

ただし、すべてのインクルードヘッダーの前に#(ハッシュ)が使用されているのはなぜですか?任意の提案のための

多くのおかげで、

#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 

答えて

6

の#includeはあなたが#とインクルード含ま間の空間によって混同される可能性があるC.

内のファイルを含める方法です。

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

+0

はい、それでした。私は#とインクルードの間のスペースに混乱していました。ありがとう。 – ant2009

3

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

8

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

1

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

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

3

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

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

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

さらに詳しい情報はWikipedia entry on the C preprocessorにあります。

#includeは、たとえばVB.Net ImportsステートメントまたはC#usingステートメントとは異なります。それらは他のクラスに対しての参照を作るが、実際には#includeはソースファイルのその場所にインクルードされたファイルのテキストを挿入する。そして再帰的に動作することができるので、インクルードされたファイル自体はまだ#includeかもしれません。

1

includeifdefなどは、すべてのプリプロセッサディレクティブなので、必要は、彼らの前にポンド(またはハッシュ)文字を持っています。このコードを書いたコーダーは、左側にある#文字をすべて整列させて見た目をきれいにする(彼の意見では)。

cplusplus.comにはプリプロセッサディレクティブのoverviewがあります。

関連する問題