0
此代碼的工作,當所有PARAMS傳遞給HTML_A預期:忽略空可變參數PARAMS
#include <stdio.h>
#define HTML_A_fmt_void
#define HTML_A_arg_void
#define HTML_A_fmt_link(fmt, ...) " href=\""fmt"\""
#define HTML_A_arg_link(fmt, ...) ,__VA_ARGS__
#define HTML_A_fmt_text(fmt, ...) fmt
#define HTML_A_arg_text(fmt, ...) ,__VA_ARGS__
#define HTML_A(link, text) \
printf("<a" HTML_A_fmt_##link ">" HTML_A_fmt_##text "</a>\n" HTML_A_arg_##link HTML_A_arg_##text)
int main(void)
{
HTML_A(
link("%s", "http://wwww.google.com"),
text("%s", "Visit google")
);
HTML_A(
link("%s", "http://wwww.google.com"),
void
);
HTML_A(
void,
text("%s", "Visit google")
);
HTML_A(
void,
void
);
return 0;
}
但是,如果我想在格式調用HTML_A不ARGS:
HTML_A(
link("http://wwww.google.com"),
text("Visit google")
);
我收到此編譯在GCC錯誤:
demo.c:17:1: warning: ISO C99 requires rest arguments to be used
demo.c: In function ‘main’:
demo.c:17: error: expected expression before ‘,’ token
CPP回報:
printf("<a" " href=\"""http://wwww.google.com""\"" ">" "Visit google" "</a>\n" , ,);
隨着,,
底。
您是否嘗試運行預處理器並查看輸出? GCC中的'cpp'或'gcc -E'。 – effeffe
@effeffe是的,看到CPP輸出 –
取代',__VA_ARGS__',您可能需要使用',## __VA_ARGS__'編輯。 ? – 2013-01-02 13:27:30