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遍