我有这段代码:
PRINT_VALUE("Displaying value: %x",A->B.C.D);
D的类型为unsigned short。
#define PRINT_VALUE(Name,Val) \
if(Val){fprintf(fp,Name,Val);fprintf(fp,"\n");}\
else {fprintf(fp,Name);fprintf(fp,"\n");}
即使我使用%d并将A-> B.C.D强制转换为int,也会出现相同的警告。有什么帮助吗?
警告讯息:
警告:格式'%x'需要匹配的'unsigned int'参数 [-Wformat]
答案 0 :(得分:2)
您的宏扩展存在问题。我有类似的代码。
#define fp stdout
#define PRINT_VALUE(Name,Val) \
if(Val){fprintf(fp,Name,Val);fprintf(fp,"\n");}\
else {fprintf(fp,Name);fprintf(fp,"\n");}
int main()
{
short D = 0;
PRINT_VALUE("Displaying value: %x", (unsigned int)D);
}
此宏扩展如下
int main()
{
short D = 0;
if((unsigned int)D)
{
fprintf(stdout,"Displaying value: %x",(unsigned int)D);
fprintf(stdout,"\n");
}
else
{
fprintf(stdout,"Displaying value: %x"); //<-- the warning is here
fprintf(stdout,"\n");
};
}
else
部分也需要参数。可能这不是你希望宏做的事情。