这段代码:
Int32 status;
printf("status: %x", status)
给我以下警告:
jpegthread.c:157: warning: format '%x' expects type 'unsigned int', but argument 3 has type 'Int32'
我知道我可以通过转换类型来摆脱它,但是是否可以使用 GCC 编译器标志来摆脱该特定类型的警告,并且仍然使用-Wall?
如果您需要该代码可移植,那么您应该将参数转换为无符号整数,因为在某些平台上 int 类型的大小可能与 Int32 不同。
要回答有关在 GCC 中禁用特定警告的问题,您可以在 GCC 中启用特定警告:-Wxxxx并禁用它们-Wno-xxxx.
来自GCC 警告选项:
您可以请求许多以选项开头的特定警告-W
, 例如-Wimplicit
请求有关隐式声明的警告。这些特定警告选项中的每一个也都以否定形式开头-Wno-
关闭警告;例如,-Wno-implicit
。本手册仅列出两种形式中的一种,以非默认形式为准。
对于您的情况,有问题的警告是-Wformat
-Wformat
检查对 printf 和 scanf 等的调用,以确保提供的参数具有适合指定格式字符串的类型,并且格式字符串中指定的转换有意义。这包括标准函数以及由格式属性指定的其他函数(请参阅功能属性),在 printf、scanf、strftime 和 strfmon(一个X/Open扩展(不在 C 标准中)系列(或其他特定于目标的系列)。在没有指定格式属性的情况下检查哪些函数取决于所选的标准版本,并且对没有指定属性的函数的这种检查被禁用-ffreestanding
or -fno-builtin
.
这些格式根据 GNU libc 版本 2.2 支持的格式功能进行检查。其中包括所有 ISO C90 和 C99 功能,以及来自 Single Unix 规范和一些 BSD 和 GNU 扩展的功能。其他库实现可能不支持所有这些功能; GCC 不支持对超出特定库限制的功能发出警告。然而,如果-pedantic
与使用-Wformat
,将给出有关不在所选标准版本中的格式功能的警告(但不适用于 strfmon 格式,因为这些格式不在 C 标准的任何版本中)。请参阅控制 C 方言的选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)