簡體   English   中英

清單C常量/宏

[英]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

根據源中的位置,使用該邏輯,行號將有所不同。 此示例用於顯示可以使用該宏的位置...

這是一個頁面的鏈接 ,其中包含命令行選項的概述, 以列出大多數編譯器( gccclang ...)的預定義宏

暫無
暫無

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

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