[英]Preprocessor #if directive
我正在編寫一個大代碼,但我不希望所有這些都在main.c中,所以我寫了一個.inc文件,其中包含帶有功能的IF-ELSE語句,我想知道是否可以這樣寫:
#if var==1
process(int a)
{
printf("Result is: %d",2*a);
}
#else
process(int a)
{
printf("Result is: %d",10*a);
}
#endif
我嘗試編譯它,但它給了我錯誤,或者在最佳情況下,它只是在第一個函數進程中進行而未檢查var變量(將其設置為0)。
預處理器不會“知道”任何變量的值,因為即使在編譯之前(而不是在運行時)它也會執行其工作。
在預處理條件#if
你只能評估#define
倒是符號和常量表達式。
您所顯示的特定示例可以簡單地轉換為:
printf("Result is: %d", (var == 1 ? 2: 10) * a);
這就是你想要的:
process(int a)
{
if (var == 1)
printf("Result is: %d",2*a);
else
printf("Result is: %d",10*a);
}
重要的是要記住,預處理器是其自己的程序,而不是您正在編寫的程序的一部分。 變量“ var”(或此處表示的var)不在預處理器標識符的名稱空間中。
剛剛完成。 對於符合標准的編譯器,您的代碼將始終是正確的。 在#if
表達式求值中,預處理器不知道的所有標識符都簡單地替換為0
(如果需要,則為false)。 因此,在您的特定情況下,如果var
只是變量而不是宏,則結果將始終是函數的第二個版本。
對於您為MS報告的錯誤:我確實知道MS編譯器不符合標准,但是我不知道它們甚至不能滿足這種基本語言要求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.