2016-02-10 43 views
0

我正在使用C遺留代碼。在代碼中,使用宏:C:宏的打印值

static int _main(A_MACRO *input_obj) 
{ 
.... 

我不確定A_MACRO聲明input_obj的數據類型是什麼。我如何將這些信息打印到屏幕上?

我試圖做這樣的:

static int _main(A_MACRO *input_obj) 
{ 
sprintf("%s is the macro", A_MACRO); 
.... 

但造成此錯誤消息:

error: expected primary-expression before ‘)’ token 
+0

「我使用C遺留代碼工作」 - 那麼,爲什麼添加的標籤不同語言?並提供[mcve]。 – Olaf

+0

你使用什麼編譯器? 'gcc -E'發出預處理的代碼。但是''grep'' #define A_MACRO'的所有出現可能更容易.. –

+1

您需要在代碼庫中查找定義此宏的位置。運行'grep「#define。* A_MACRO」* .c * .h'來找到它。 – dbush

回答

1

您可以創建一個「stringize」宏觀該定義轉換爲像一個字符串所以:

#define STRINGIZE_(x) #x 
#define STRINGIZE(x) STRINGIZE_(x) 

然後,您只需「調用」它的宏名稱:

printf("A_MACRO is defined as %s\n", STRINGIZE(A_MACRO)); 

或者,這取決於你使用的編譯器,它可能顯示宏定義的選項。例如,gcc可以使用-dM選項:

gcc -dM file.c | grep A_MACRO 
+1

您需要雙層實現'STRINGIZE(x)'來處理自身爲宏的參數。你現在所擁有的僅僅是打印「A_MACRO」字符串,而不是「A_MACRO」宏的實際「值」。首先,'#define STRINGIZE_(x)#x',然後'#define STRINGIZE(x)STRINGIZE_(x)'。 – AnT

+0

@AnT兩級執行不起作用它正在打印「A_MACRO」我認爲唯一的方法是'-dM'標誌。 – nikartix

+0

@Nick:你確定你轉載了它嗎? – AnT