2014-06-24 31 views
4

我試圖重構一段遺留代碼,並且想要在源中的某個點定義的所有宏的快照。代碼導入了一些荒謬的頭文件等,手工跟蹤它們有點乏味。打印所有已定義的宏

喜歡的東西

#define FOO 1 


int myFunc(...) { 
    PRINT_ALL_DEFINED_THINGS(stderr) 

    /* ... */ 
} 

輸出某處預計

MACRO: "FOO" value 1 

我用gcc,但有機會獲得其他的編譯器,如果他們更容易來完成這個任務。

編輯:

鏈接的問題不給我正確的輸出是:

#include <stdio.h> 

#define FOO 1 

int main(void) { 
    printf("%d\n", FOO); 
} 

#define FOO 0 

這非常清楚地打印1運行時,但gcc test.c -E -dM | grep FOO給我0

+0

你可以從編譯器中完成。我前幾天做過。 h/o我會看看我做了什麼 –

+0

據我所知,這樣的事情既不存在也不容易實現,因爲宏在C編譯器之前被評估。 – usr1234567

+0

@SteveCox您也可以自己定義自己定義的東西。我甚至在關閉之前測試過重複。 – Lundin

回答

1

要轉儲全部定義您可以運行:

gcc -dM -E file.c 

檢查GCC dump preprocessor defines

所有定義它將轉儲將定義的值(或上次重新定義),您將無法轉儲所有這些代碼部分中的定義值。

當宏已被重新定義時,您還可以附加選項「-Wunused-macro」來警告。