在 gnu++98(即编译参数 -std=gnu++98)模式下,可以畅通无阻地使用 long long 类型。
这背后的逻辑和 gnu89 是完全一致的。可以这样拆解来看:
gnu++98 = C++98 官方标准 + GNU 独有扩展
- 官方标准的缺失: 纯正的 C++98 标准中确实没有
long long。 - GNU 扩展的补足: GCC 编译器家族非常早就把
long long(64位整型)作为自己的"看家扩展"加到了编译器里,不仅给 C 语言用,也给 C++ 用。 - 默认方言: 当你开启
gnu++98时,你实际上是在告诉编译器:"请以 C++98 为基础,并且允许使用所有的 GNU 扩展功能 "。因此,作为核心扩展之一的long long自然被完美支持。
严格模式与 GNU 模式的对比体验
为了让你更直观地感受,如果你在代码里写了 long long a = 10;,不同的编译参数会有不同的表现:
- 使用
-std=gnu++98(早期 GCC 的默认 C++ 模式):
正常编译通过,没有任何警告,完美运行。 - 使用
-std=c++98 -pedantic(开启纯正 C++98 严格检查):
编译能通过,但编译器会无情地甩出一个警告(Warning):
warning: 'long long' is a C++11 extension [-Wlong-long]
总结来说 ,只要带有 gnu 前缀的编译标准(如 gnu89, gnu99, gnu++98),编译器都会大开绿灯,把你当做"自家人",让你舒舒服服地使用 long long 这个 GNU 早就造好的轮子,而不必等到 C++11 官方颁布许可。