簡體   English   中英

預處理程序#if指令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM