簡體   English   中英

ANSI C中表達式的條件編譯和編譯時間評估

[英]Conditional Compilation and compile time evaluation of expressions in ANSI C

我想執行以下操作,但是編譯器不喜歡它:

unsigned short foo = 1;
// do something with foo
#if sizeof(short) * CHAR_BIT > 16
   foo &= 0xffff;
#endif

我知道這個表達式始終可以在編譯時進行完全評估,但是也許只有在預處理器完成之后才可以進行評估嗎? 在ANSI C中可能嗎,還是我只需要在運行時進行檢查?

您不能在預處理程序表達式中使用sizeof 您可能想要執行以下操作:

#include <limits.h>

#if SHRT_MAX > 32767
    /* do soemthing */
#endif

如果您的目的是在數據類型大小錯誤時停止編譯,則以下技術很有用:

struct _check_type_sizes
{
  int int_is_4_bytes[(sizeof(int) == 4) ? 1 : -1];
  int short_is_2_bytes[(sizeof(short) == 2) ? 1 : -1];
};

(sizeof()函數在這里由編譯器而不是預處理器解釋。)

這種方法的主要缺點是編譯器錯誤不是很明顯。 確保您寫出非常清晰的評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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