【发布时间】:2016-11-25 06:24:30
【问题描述】:
-Wlong-long gcc 警告的原因是什么?
来自 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.
据我了解,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 位和更新的工具链。
【问题讨论】:
-
没有
stdint.h的编译器不符合C99,这意味着它们很可能根本没有long long! (除非它们是旧版本的 GCC。) -
从给出的描述看来,Patrick 的“不太老”的编译器与 90 年代的 gcc 属于同一类别 -
long long没有stdint.h(除了在 90 年代的大部分时间里,我们借口是 C99 还没有写出来,再加上“普通” CPU 没有 64 位整数寄存器的借口,所以基本 C 类型中缺少 64 位整数是有道理的。)跨度> -
@WumpusQ.Wumbley:C 被设计为在 8 位处理器上可用(实际上在 1980 年代经常使用);必须在四个步骤中执行长时间的加法有点令人厌烦,但即使已知数字不大于 16777215,能够对单个数量进行操作的便利也值得使用四个步骤而不是三个步骤来消耗性能。使用 8 字节类型是合理的情况要少得多。恕我直言,正确的补救措施是使“long long”成为可选功能,至少对于独立实现而言。
标签: c++ c gcc types gcc-warning