为什么gcc会长时间发出警告?

Pat*_*ick 32 c c++ gcc types gcc-warning

-Wlong-longgcc警告的原因是什么?

从gcc手册页:

-Wlong-long
       Warn if long long type is used.  This is enabled by either -Wpedantic or -Wtraditional in ISO C90 and C++98 modes.  To inhibit the warning messages, use -Wno-long-long.
Run Code Online (Sandbox Code Playgroud)

据我了解,long long要求至少为64位(实际上它总是64位,至少与今天的编译器一样).这不是ISO C90或C++ 98的情况,还是有其他原因不使用long long

我知道<stdint.h>类型int64_t和朋友的类型,但一些不太老的编译器(例如VS2005和Green Hills ARM 3.5)不提供<stdint.h>,我认为long long(至少)64位用于那些和更新的工具链.

a3f*_*a3f 37

long longISO C90和C++ 98中还没有类型.它仅在ISO C99和C++ 11中添加.

然而,GCC在标准化之前将其作为扩展.

  • ...一个罕见的gcc扩展示例,它使用相同的语义进行标准化 (20认同)
  • @Patrick是的,我认为该选项只存在,因为有人认为`-ansi -pedantic`启用的所有警告应该由他们自己的`-Wfoo`选项表示.真的没有理由单独使用`-Wlong-long`.哦,但是`-Wno-long-long`确实更有意义. (6认同)
  • @Patrick:这种警告的另一个原因是,对于碰巧在LNG_MAX + 1u和ULNG_MAX之间的十进制文字,这些文字在C89中被视为无符号类型,但在C99中被视为有符号类型.在C89实现中,LNG_MAX为2147483647,ULNG_MAX为4294967295,表达式"4294967295 == - 1"将产生1(因为两边都将转换为`unsigned long`),而在C99中它将评估为0(两边都转换为到`unsigned long long`). (2认同)
  • @Galaxy long long 至少是 **64** 位。;) (2认同)