2016-05-31 172 views
4

如何通過預處理器指令檢查unsigned long long類型在當前編譯環境中是否可用?檢查是否有無符號long long可用

我試圖檢查

#if __STDC_VERSION__ >= 199901L 
    /* Available */ 
#else 
    /* Not available */ 
#endif 

但用gcc編譯,並至少在沒有-std= -compiler論證這導致「不avaibalble」(但會工作)。

是否有更好的宏來檢查,以至少它可以與C99標準編譯器和GCC沒有-std=C99

+8

不是最優雅的解決方案,但我的第一本能是檢查'limits.h'頭中是否存在'ULLONG_MAX'符號。 –

+0

完成。我有點驚訝,你沒有得到任何更好的答案。我想快速和骯髒的解決方案有時是最好的! –

回答

1

雖然它不是最優雅的解決方案,但我的第一本能是檢查limits.h標頭中是否存在ULLONG_MAX符號。

如果已定義,那麼unsigned long long int類型幾乎肯定可用。如果沒有定義,那麼類型可能不可用 - 或者至少,它不是很好的支持,並且可能只能作爲非可移植的編譯器擴展提供。

3

如果不可用,你打算怎麼辦?你的代碼是否應該編譯和工作?如果沒有,則放棄檢查,使用unsigned long long,編譯器會告訴你它是否無法處理它。

如果你想要一個適用於C99編譯器的宏 - 那麼這是毫無意義的,因爲C99要求無符號long long。

+0

很確定他在這個問題中回答了你的第二個問題:*「用gcc編譯,至少沒有-std = -compiler參數,這會導致」不可用「(但會起作用)。」* –

+0

1)然後我必須模擬64位整數運算與一些較小的「int」。該代碼僅需要64位的中間值。 2)我想檢查'long long'是否可用。代碼應該在每個編譯器中進行編譯,並且*至少*檢測出提供'long long'的情況。它不需要檢測一些奇怪的編譯器中可用的'long long'。 – urzeit

相關問題