如果你熟悉c語言,應該知道這個問題的答案是no.
在其他高階語言中這個這個要求很容易滿足,但在c語言標準中沒有提供型別判斷功能.
說到這兒,這話題好像應該結束了。
但是,這個問題的答案其實並不是絕對是no,雖然c語言標準中並沒有提供型別判斷的能力,但不同的c編譯器在實現時會根據需要對c語言提供擴充套件功能。比如gnu c(gcc).
gcc 通過內建函式(built-in function)__builtin_types_compatible_p
為c語言提供了執行時的型別判斷功能:
示例如下:
#include
#include
void test(int x)else
}int main(void)
輸出
is
notvoid
上面的**實現判斷型別是否為void
,因為__builtin_types_compatible_p
是編譯內建函式,所以直接在巨集定義中呼叫,所以上面的判斷可以定義成乙個簡單的函式巨集
#define __type_is_void(expr) __builtin_types_compatible_p(typeof(expr), void)
關於__builtin_types_compatible_p
的詳細說明參見《other built-in functions provided by gcc》
再次提請注意:
__builtin_types_compatible_p
是gcc提供的c語言擴充套件的功能,在其他編譯器並不適用。
《other built-in functions provided by gcc》
《extensions to the c language family》 gnu的c語言擴充套件全部說明
《how to checktypeof
for void value at compile time?》
學習boost模板程式設計 判斷兩個型別是否相同
boost type traits is same.hpp中的is same模板,用於判斷兩個型別是否完全相同。首先,試一下下面函式的作用 template bool is same tester t t bool is same tester int a char b bool c is same...
python 兩個list之間判斷是否有相同值
例項 axis 4 slot 1 2,3 4,5 6 atwill7 false for i in axis if i not in slot if atwill7 print 假 else print 真 下列 詳解 1 用 i 去遍歷第乙個列表 axis 如果 i 不在第二個列表 slot 裡面...
C 如何判斷兩個物件是否相同
在c 中判斷物件相等,這是對引用型別進行判斷,而不是對值型別,如果是對字串,或者是數值進行判斷相等只需要用 運算子就可以了。對兩個物件用 運算子,只能判斷他們兩個在記憶體中的位址是否一樣的。1.對乙個類只例項化一次 向那些賦值來賦值去的引用如果沒有new例項化乙個物件的話,那麼這些賦值來,賦值去的物...