c 語言中如何判斷兩個型別是否相同

2021-08-20 21:05:17 字數 1098 閱讀 1614

如果你熟悉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 checktypeoffor 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例項化乙個物件的話,那麼這些賦值來,賦值去的物...