[英]Listing C Constants/Macros
有沒有辦法讓GNU C預處理器 ,cpp( 或其他工具 )列出C文件中給定點的所有可用宏及其值?
我正在尋找系統特定的宏,同時移植已經unix精通的程序並加載一堆稀疏的unix系統文件。
只是想知道是否有一種比尋找定義更簡單的方法。
我不知道文件中的某個位置,但使用:
$ touch emptyfile
$ cpp -dM emptyfile
轉儲所有默認值。 對包含一些#include
和#define
行的C文件執行相同操作也包括所有這些。 我想你可以截斷你的文件到你關心的地方然后做同樣的事情?
從手冊頁 :
-dCHARS
CHARS
是由以下一個或多個字符組成的序列,不得以空格開頭。 其他字符由編譯器正確解釋,或保留用於GCC的未來版本,因此會被忽略。 如果指定行為沖突的字符,則結果未定義。
M
而不是正常輸出,為執行預處理器期間定義的所有宏生成#define
指令列表,包括預定義宏。 這為您提供了一種查找預處理器版本中預定義內容的方法。 假設你沒有文件foo.h,那么命令touch foo.h; cpp -dM foo.h
將顯示所有預定義的宏。
如果在沒有
-E
選項的情況下使用-dM
,則-dM
被解釋為-fdump-rtl-mach
的同義詞。
D
像M
一樣,除了兩個方面:它不包括預定義的宏,它輸出#define
指令和預處理的結果。 兩種輸出都轉到標准輸出文件。
N
像D一樣,但只發出宏名稱,而不是它們的擴展。
I
除了預處理的結果外,還輸出#include
指令。
使用gcc,您可以使用“-dD”選項將所有宏定義轉儲到stdout。
為什么不查閱Predefined-macros部分 ? 你是否需要這個來建立一個項目或一些這樣的東西?
要使用宏列出“它們在C文件中給定點的值”,有兩個可以演示C文件中的給定點,特別是在編譯時,並且可以被認為對跟蹤故障點有用...考慮這個示例代碼名為foo.c :
if (!(ptr = malloc(20))){ fprintf(stderr, "Whoops! Malloc Failed in %s at line %d\n", __FILE__, __LINE__); }
如果在該文件中多次使用該代碼邏輯,並且對malloc
的調用失敗,您將獲得此輸出:
Whoops! Malloc Failed in foo.c at line 25
根據源中的位置,使用該邏輯,行號將有所不同。 此示例用於顯示可以使用該宏的位置...
這是一個頁面的鏈接 ,其中包含命令行選項的概述, 以列出大多數編譯器( gcc
, clang
...)的預定義宏 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.