如下,自定義的宏在展開是遇到錯誤,提示引數個數不夠。而事實上如果宏嵌套展開正確的話,引數個數應該是夠的
main.c:51:46: error: macro "my_print" requires 5 arguments, but only 2 given
voss_print(COMM_INFO, "test print\n");
#define SUBSYS_NO 1
#define MDLNO_COMM 1
#define PRINT_INFO 1
#define COMM_INFO SUBSYS_NO, MDLNO_COMM, PRINT_INFO
#define the_print printf
#define my_print(subsystem, module, level, format, ...) the_print(format, ##__VA_ARGS__)
my_print(1, 1, 1, "test print\n");
my_print(1, 1, 1, "test print %d\n", 1);
/* 這一句編譯錯誤,宏展開后編譯器認為引數個數不夠 */
my_print(COMM_INFO, "test print\n");
uj5u.com熱心網友回復:
你使用的是宏函式里面嵌套宏 這種寫法很少見 你可以直接預編譯 在C語言中看看 展開是什么這個代碼出錯是發生在編譯期 而不是預處理期 在linux下很容易通過gcc 查看預處理 可能和你期望的展開不一致。
uj5u.com熱心網友回復:
int main()
{
printf("test print\n" );
printf("test print\n" );
printf( );
return 0;
}
預處理.i檔案后的代碼 你宏替換后是空的
uj5u.com熱心網友回復:
#define COMM_INFO SUBSYS_NO, MDLNO_COMM, PRINT_INFO
這句宏定義有問題,建議看一下COMM_INFO的內容,COMM_INFO對應的是SUBSYS_NO
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/66108.html
標籤:C語言
下一篇:非遞回演算法中序遍歷二叉樹
