gcc编译器报告类的大小=零[重复]

Posted

技术标签:

【中文标题】gcc编译器报告类的大小=零[重复]【英文标题】:gcc compiler reporting size of class=zero [duplicate] 【发布时间】:2013-09-02 06:57:06 【问题描述】:

我有小程序

#include<iostream>
using namespace std;

class xyz
   private: int xyz[];  // Why this line is not giving error.
; 

int main(int argc, char *argv[])

    cout<<sizeof(xyz); //Q=Why this code is not giving error.
    return 0;

我正在使用 gcc 4.3。请告诉我为什么我错了?

【问题讨论】:

这看起来很奇怪 - 更高版本的 gcc 似乎也给出了相同的结果 (0),并且在使用 g++ -Wall ... 编译时没有警告。 clang 对未使用的私有字段发出警告,仅此而已。 GCC 4.3 已经很老了,而且比新版本更不符合 C++ 标准。较新的 GCC 还提供了更好的诊断和优化。尝试将您的 GCC 更新到 GCC 4.8.1(或至少 4.7.3)并使用 gcc -Wall -g @Basile:我试过 gcc 4.8 还是一样。 @PaulR 我尝试检查“g++ -Wall -o check check.cpp”,但没有收到任何警告: 见***.com/q/10971651/841108 【参考方案1】:

您正在查看的是 g++ 编译器扩展。你可以触发警告

ISO C++ forbids zero-size array 'xyz'

如果您使用-Wpedantic 标志进行编译,您可以使用-pedantic-errors 标志停止编译。您的输出显示 0 的原因是 g++ 会将其转换为(也不符合标准)int[0]。另请参阅this answer 了解更多信息。

【讨论】:

它似乎比 gcc 更普遍。 @PaulR 是的,但这个问题是 gcc 特定的; “这是一个 g++ 编译器扩展”并不是说其他​​编译器也没有它;) -pedantic 扩展使我的编译器为“ISO C++ 禁止零大小数组 âaâ”生成警告。

以上是关于gcc编译器报告类的大小=零[重复]的主要内容,如果未能解决你的问题,请参考以下文章

LFS 系列从零开始 DIY Linux 系统:构建 LFS 系统 - GCC-4.9.2

LFS 系列从零开始 DIY Linux 系统:构建临时系统 - GCC-4.9.2

LFS 系列从零开始 DIY Linux 系统:构建临时系统 - GCC-4.9.2 - 第2遍

LFS 系列从零开始 DIY Linux 系统:构建临时系统 - GCC-4.9.2 - 第2遍

GCC 可以使用编译时常量变量优化类的方法吗?

我的 linux 的 gcc 编译器不支持布尔值 [重复]