【问题标题】:gcc compiler reporting size of class=zero [duplicate]gcc编译器报告类的大小=零[重复]
【发布时间】: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”,但没有收到任何警告:

标签: c++ linux gcc


【解决方案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â”生成警告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多