2009-07-21 60 views
1

我是C新手,我維護着一些代碼。我在頭文件中遇到了這個問題。我可以理解,如果在Windows上編譯源代碼,它將輸入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 2009-07-21 03:21:13

3

因爲「的#include」是告訴預處理器包括一個頭的語法。英鎊之後的空格僅用於格式化,並非絕對必要。

8

散列(#)表示預處理器指令。預編譯器在編譯前運行代碼,並根據以「#」開頭的所有行進行操作。 「#include filename.h」指令主要複製filename.h的所有內容,並將其粘貼到「#include filename.h」行所在的位置。

3

的#線由C編譯器本身的實際處理,而是由預處理運行在編譯流水線的早期階段。 「#」是它如何知道它負責哪一行。

同樣的預處理器也可以在其他上下文中使用。

預處理不但可以做表達式求值,如#if#ifdef條款,但它也可以打開其他文件,並使用#include插入它們甚至做使用#define條款文本替換。

更多信息請參見Wikipedia entry on the C preprocessor

#include與例如VB.Net Imports聲明或C#using聲明不同。那些使引用爲其他類,但#include實際上將包含文件的文本插入源文件中該位置。它可以遞歸地進行操作,這樣包含的文件本身可以是其他的文件。

1

includeifdef等都是預處理指令,所以他們必須在他們面前英鎊(或哈希)字符。編寫這段代碼的編碼人員簡單地列出了左側的所有這些#字符,以使代碼看起來更清晰(在他看來)。

cplusplus.com有一個很好的overview預處理指令。