2016-04-08 53 views
4

stdio.h中定義的FILE類型爲例:有沒有什麼方法可以在不查看頭部的情況下獲取有關其字段(名稱,大小,偏移量等)的信息?有時用這樣的函數/宏來檢查一個結構的組件會很方便。如何「查看」一個結構?

+3

不,這樣的元信息在C程序中不可用。 –

+0

也許你應該問一個關於你認爲它會有用的情況的新問題 - 你可能會發現一個更好的辦法。 – OrangeDog

+1

如果使用調試信息和支持它的格式進行編譯,請查看目標文件。但是這看起來像一個XY問題。 – Olaf

回答

10

有與C數據結構相關聯的元數據,所有這些編譯時丟失。

而且這是完全可能的,因爲FILE是不透明的,沒有公共頭部實際上有定義。它可能只是庫中的typedef struct __FILE FILE;,然後所有的細節都保存在裏面,可能在代碼中你甚至沒有源代碼。

+0

通常,由於歷史原因,「FILE」被定義爲「typedef struct _iobuf FILE」。 – fuz

1

簡單的答案是。你必須有源代碼。

-1

這是不可能的。 C不保留這種信息,可能是由於「你不支付你不使用的東西」的原理;它也使語言簡單和便攜。

您最多可以做的是通過offsetof標準宏查詢struct中給定成員的位置。但是你必須知道這個領域的名字。

+0

「解析」你的意思是「自己讀一遍,作爲一個人」? – OrangeDog

+0

@OrangeDog不,我的意思是從代碼解析它。它不一定是C. – edmz

+0

好吧,這是一個可怕的想法。 – OrangeDog

1

在基於C的結構中,數據的存儲方式不是「自定義」 - 您必須知道結構定義才能解釋數據。這樣可以將數據的大小減少到最低限度,並且可以更快地訪問數據,只要程序能夠理解結構。

0

答案是否定的。

無論何時,我需要找到關於struct數據成員的信息,Header Filecomments在那裏對我來說就足夠了。

你不能有一個函數/宏檢查結構的組成部分,因爲有一個在C.

0

的唯一途徑的變量和程序有關的資料看關於這方面的任何元數據應該有實際的來源,或解釋結構如何組織的api /軟件文檔。