如何在c中獲取變量的類型?目標c有className,php有get_class()等...className的c版本
3
A
回答
1
祝你好運。 C會將任何內存塊轉換爲您喜歡的任何數據類型。它本身並不真正瞭解類型。
5
你看看源代碼並找到類型;因爲C中沒有動態類型,所以靜態類型就是全部。
3
你不能這樣做。 C提供絕對沒有辦法獲得變量的類型。
1
你可以這樣做的一種方法是使用sizeof
運算符來獲得變量的大小,然後基於此,可以對變量的內容做出「假設」。
雖然我不認爲這會幫你指點,因爲我的直覺是所有的指針都有相同的大小,不管他們在引用什麼。
0
由於在C中不可能有未知類型的變量,因此不需要這樣做。 C類型沒有相應的id
。有可能有一個void指針指向你不知道的目標類型的內存,但它必須被轉換爲指向特定類型的指針,以便實際具有任何特定類型 - 直到此時,它只是一個地址。
有些地方可能會有更多的多態性,但C只是沒有它。
(*注:我貼現工會,因爲他們是一個類型的所有自己和真正的問題是什麼類型的,你想擺脫它)
1
至於其他的答案說,C不提供動態的運行時類型檢查 - 所有的輸入都是在編譯時執行的。如果你需要在C中進行運行時類型確定,那麼你需要以某種方式構建它。
一些例子,
- 放置一個標籤中,指示類型的結構。
- 使用其他數據,如在
printf()
格式說明字符串來表示類型
這些都是各種各樣的,如果你從一個文件中的數據序列化到/,例如,你可能需要做的事情。不幸的是,你幾乎沒有編譯器或標準庫的幫助。第三方序列化庫可能會有所幫助,但這確實取決於你想要做什麼。
相關問題
- 1. new $ className(); php版本支持
- 2. C#FindElement ClassName枚舉
- 3. 關於Objective-C中的「+ className」?
- 4. TileContainer無法設置未定義SAPUI5的屬性'className'版本1.48
- 5. Angular 4/Ionic3生成版本更改組件classname
- 6. C#版本的preg_match
- 7. C#版本的optparse?
- 8. isnormal的C++版本()
- 9. SUDS的C#版本?
- 10. C++版本的CopyOnWriteArrayList
- 11. C版本的C++ std :: map
- 12. 排版使用classname在foreach php
- 13. C++錯誤:在'I2Cdev'(classname)
- 14. C++'ClassName Not Declared'錯誤
- 15. ClassName變量(arg1)之間的區別;和ClassName variable = ClassName(arg1);
- 16. 的MonoTouch/C#「stringWithContentsOfUrl」的版本
- 17. Android版本的C#的Console.WriteLine?
- 18. self :: vs className :: PHP中的靜態className metods
- 19. 對ClassName :: ClassName的未定義引用
- 20. Logger.getLogger(className)和LogFactory.getLog(className)之間的區別?
- 21. C#編譯版本
- 22. C#和CLR版本
- 23. C++:程序版本?
- 24. C++調試版本
- 25. C#Directory.Exists ipv6版本
- 26. C++庫的不同版本
- 27. C++ Directx的哪個版本?
- 28. PHP-Snoopy的C++版本
- 29. C的'++`計劃版本
- 30. __FUNCTION__宏的C#版本
你使用C還是C++? C沒有類,或沒有標準的方法來做到這一點,AFAIK。 – 2010-04-30 22:41:00