我有这样的代码:
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-> bc从D到int,同样的警告仍然存在。任何帮助吗?
警告消息:
警告:格式' %x '期望一个匹配的' unsigned int '参数(-Wformat)
您的宏展开有问题。我有一个类似的代码。
#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
部分也需要一个参数。