2011-02-26 61 views
6

有辦法在C中獲取數據類型嗎?我可以從C中的變量中檢索數據類型嗎?

例如:

 
int foo; 

if (foo is int) 
{ 
    // do something 
} 

或類似:提前

 
if (typeof(foo) == typeof(int)) 
{ 
    // do something 
} 

感謝。

+4

這是一個int,你可以通過查看源代碼知道 - 無需反思! – nos 2011-02-26 15:44:58

+1

我真的不明白這個問題。如果將foo定義爲int,那麼爲什麼在編譯時需要獲取它的類型;自省在實現多態的面向對象編程中很有用,但我不明白爲什麼你需要在C中使用它。 – Greg 2011-02-26 16:10:20

回答

10

這被稱爲類型自省或反思,並且不被C語言支持。您可能必須編寫自己的反射庫,這將是一項重大的工作。

+0

謝謝,我已經想象過了。像#define MY_INT之類的東西,稍後設置另一個變量來保存我的自定義類型,對吧?謝謝。 – user464230 2011-02-26 15:45:38

+1

,或者你可以定義一個結構,其中一個字段包含「typeid」,另一個字段的大小足以保存任何值,這些值可能希望存儲在結構中。 – Jimmy 2011-02-26 15:54:54

+0

@Jimmy:變種? http://msdn.microsoft.com/en-us/library/ms221627.aspx – 2011-02-26 16:05:58

2

事實上,fooint勢必名稱foo。它永遠不會改變。那麼這樣的測試怎麼會有意義呢?唯一可以使用的情況是宏,其中foo可以展開爲不同類型的變量或表達式。在這種情況下,你可以看看我的一些過去的問題相關的話題:

Type-generic programming with macros: tricks to determine type?

Determining presence of prototype with correct return type

+1

我完全同意。 – Greg 2011-02-26 16:12:26

+0

你沒有明白......無論如何......問題是由emddudley解決的 – user464230 2011-03-02 05:46:43

0

你不會不知道類型的唯一情況是,如果foo的類型定義通過typedef - 如果是這樣的話,你的例子應該反映它。爲什麼你需要依賴於類型的東西?可能有辦法解決你的實際問題,但你沒有提出你的實際問題。

相關問題