如何解决这个编译警告? (格式说明符问题)

时间:2014-03-20 06:25:43

标签: c casting warnings compiler-warnings

我有这段代码:

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]

1 个答案:

答案 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部分也需要参数。可能这不是你希望宏做的事情。