2010-04-30 88 views
3

如何在c中獲取變量的類型?目標c有className,php有get_class()等...className的c版本

+0

你使用C還是C++? C沒有類,或沒有標準的方法來做到這一點,AFAIK。 – 2010-04-30 22:41:00

回答

1

祝你好運。 C會將任何內存塊轉換爲您喜歡的任何數據類型。它本身並不真正瞭解類型。

5

你看看源代碼並找到類型;因爲C中沒有動態類型,所以靜態類型就是全部。

3

你不能這樣做。 C提供絕對沒有辦法獲得變量的類型。

1

你可以這樣做的一種方法是使用sizeof運算符來獲得變量的大小,然後基於此,可以對變量的內容做出「假設」。
雖然我不認爲這會幫你指點,因爲我的直覺是所有的指針都有相同的大小,不管他們在引用什麼。

+1

+1爲創造力。關於指針,你可以解引用它們,然後sizeof – 2010-04-30 22:52:35

+0

謝謝。雖然忘了解引用。 – chustar 2010-04-30 22:56:35

+0

雖然取消引用它們並沒有什麼幫助,因爲只能獲取指針類型的大小(即,即使char * foo實際上是指向int的指針,也會將其解引用爲char,並返回該大小),無論如何,這很可能在代碼中可見。當然,這都是由於其他人都在說你不能擁有「未知」類型。 – bobDevil 2010-04-30 23:15:57

0

由於在C中不可能有未知類型的變量,因此不需要這樣做。 C類型沒有相應的id。有可能有一個void指針指向你不知道的目標類型的內存,但它必須被轉換爲指向特定類型的指針,以便實際具有任何特定類型 - 直到此時,它只是一個地址。

有些地方可能會有更多的多態性,但C只是沒有它。

(*注:我貼現工會,因爲他們是一個類型的所有自己和真正的問題是什麼類型的,你想擺脫它)

1

至於其他的答案說,C不提供動態的運行時類型檢查 - 所有的輸入都是在編譯時執行的。如果你需要在C中進行運行時類型確定,那麼你需要以某種方式構建它。

一些例子,

  • 放置一個標籤中,指示類型的結構。
  • 使用其他數據,如在printf()格式說明字符串來表示類型

這些都是各種各樣的,如果你從一個文件中的數據序列化到/,例如,你可能需要做的事情。不幸的是,你幾乎沒有編譯器或標準庫的幫助。第三方序列化庫可能會有所幫助,但這確實取決於你想要做什麼。