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