如何解决这个编译警告? (格式说明符问题)
Posted
技术标签:
【中文标题】如何解决这个编译警告? (格式说明符问题)【英文标题】:How to solve this compilation warning? (Format specifier issue) 【发布时间】:2014-03-20 06:25:42 【问题描述】:我有这个代码:
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”需要匹配的“无符号整数”参数 [-W格式]
【问题讨论】:
【参考方案1】:您的宏扩展有问题。我有一个类似的代码。
#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
部分也需要一个参数。可能这不是您希望宏执行的操作。
【讨论】:
我只想打印值。你能帮我修改一下代码吗? 您可以将宏中的else
部分修改为使用fputs
。但这只是一种解决方法。喜欢else fputs(Name, fp);
。这只是为了跳过警告。
谢谢您,您能否简要解释一下为什么 fputs 不发出警告而 fprintf 发出警告?以上是关于如何解决这个编译警告? (格式说明符问题)的主要内容,如果未能解决你的问题,请参考以下文章
Android Studio 警告整数乘法隐式转换为 long。如何解决这个问题?
Iphone,我该如何解决这个警告:'-respondsToSelector:' not found in protocol(s)