簡體   English   中英

如何從 C 語言頭文件中檢索類型、變量、宏等的真實定義?

[英]How to retrieve the real definition of a type, variable, macro etc. from the C language headers?

現在C語言編譯環境相當復雜。 在確定類型、變量、function 或某些 header 文件中定義的宏的實際定義時,我經常遇到問題,因為它是由當前編譯器選項激活的。

包含的文件具有條件定義、條件包含等,具體取決於選擇在特定編譯期間使用哪種語言“標准”的編譯器選項。 因此,很難在某些 header 中檢索到有條件定義的結構的實際定義(例如)。 我需要一種方法來顯示或查明其實際定義。

例如,以struct tm的定義為例,它應該在time.h中定義。 但是,您不會在GNU 項目 C 編譯器中找到它。

我總是可以參考文檔(ISO/IEC 9899 標准或 GCC 在線文檔),但在某些情況下,定義可能會根據 select 的標准或非標准編譯器環境而改變。 所以,問題是:

如何列出 function 原型、宏、變量或類型的真實定義,因為它正在由當前激活的編譯器根據所選編譯時選項進行處理?


一些例子:

  • stdio.h中查找宏EOF的值。
  • stdio.h中找到“類型” FILE的定義。
  • assert.h中找到assert宏的定義。
  • time.h中找到struct timespec的定義。
  • stdio.hfopen的原型定義中的__restrict是什么意思?

如何列出 function 原型、宏、變量或類型的真實定義,因為它正在由當前激活的編譯器根據所選編譯時選項進行處理?

從 C 語言本身,你不能。 C 語言沒有反射,不能自檢。

轉到類型定義、導航和瀏覽源代碼樹 - 這些是與 C 編程語言集成的IDE的作業,這不是編程語言本身的一部分。 有大量與 C 集成的 IDE ,有語言服務器,還有 C 代碼索引器,如ctagsGNU global 使用您為編譯器提供的相同選項和宏配置索引工具或 IDE,該工具將幫助您完成代碼。 There are alsobuild systems integrated with IDE, so that the compiler invoked by the build system uses same command line arguments as the indexer automatically (like with the help of compile_commands.json in case of cmake ).

以struct tm的定義為例

例如,安裝 eclipse 並安裝 C 和 C++ 插件。 創建新的C/C++ project ,在其中創建some.c文件並在其中鍵入#include <time.h>后跟struct tm; . 保存文件,讓 eclipse 索引器索引項目(應該是即時的)或單擊Project->C/C++ Index->Rebuild 然后將 cursor 放在tm字符串上,然后單擊F3 -> viola,在我的電腦上 cursor 進入/usr/include/bits/types/struct_tm.h文件。

但是,我的問題與命令行編譯器有關,例如 gcc
如何從 C 語言頭文件中檢索類型、變量、宏等的真實定義?

gcc是一個編譯器 - 它不支持這樣的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM