有辦法在C中獲取數據類型嗎?我可以從C中的變量中檢索數據類型嗎?
例如:
int foo; if (foo is int) { // do something }
或類似:提前
if (typeof(foo) == typeof(int)) { // do something }
感謝。
有辦法在C中獲取數據類型嗎?我可以從C中的變量中檢索數據類型嗎?
例如:
int foo; if (foo is int) { // do something }
或類似:提前
if (typeof(foo) == typeof(int)) { // do something }
感謝。
這被稱爲類型自省或反思,並且不被C語言支持。您可能必須編寫自己的反射庫,這將是一項重大的工作。
謝謝,我已經想象過了。像#define MY_INT之類的東西,稍後設置另一個變量來保存我的自定義類型,對吧?謝謝。 – user464230 2011-02-26 15:45:38
,或者你可以定義一個結構,其中一個字段包含「typeid」,另一個字段的大小足以保存任何值,這些值可能希望存儲在結構中。 – Jimmy 2011-02-26 15:54:54
@Jimmy:變種? http://msdn.microsoft.com/en-us/library/ms221627.aspx – 2011-02-26 16:05:58
有一個typeof
擴展在GCC,但它不是在ANSI C:http://tigcc.ticalc.org/doc/gnuexts.html#SEC69
而這對於OP所需的內容沒有用處。 – 2011-02-26 16:01:38
事實上,foo
是int
勢必名稱foo
。它永遠不會改變。那麼這樣的測試怎麼會有意義呢?唯一可以使用的情況是宏,其中foo
可以展開爲不同類型的變量或表達式。在這種情況下,你可以看看我的一些過去的問題相關的話題:
Type-generic programming with macros: tricks to determine type?
我完全同意。 – Greg 2011-02-26 16:12:26
你沒有明白......無論如何......問題是由emddudley解決的 – user464230 2011-03-02 05:46:43
你不會不知道類型的唯一情況是,如果foo的類型定義通過typedef - 如果是這樣的話,你的例子應該反映它。爲什麼你需要依賴於類型的東西?可能有辦法解決你的實際問題,但你沒有提出你的實際問題。
這是一個int,你可以通過查看源代碼知道 - 無需反思! – nos 2011-02-26 15:44:58
我真的不明白這個問題。如果將foo定義爲int,那麼爲什麼在編譯時需要獲取它的類型;自省在實現多態的面向對象編程中很有用,但我不明白爲什麼你需要在C中使用它。 – Greg 2011-02-26 16:10:20