C语言 如何解决编译警告?(格式说明问题)



我有这样的代码:

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部分也需要一个参数。

相关内容

最新更新