5

Cの空の構造体について質問があります。標準を読んでわかる限り、それらは許可されていないようです。

6.2.5-20

構造体タイプは、順次割り当てられるでないメンバーオブジェクトのセット(および、特定の状況では、不完全な配列)を記述します。各オブジェクトには、オプションで指定された名前と、場合によっては個別のタイプがあります。

したがって、次のようなコンパイルを試みる場合は、当然のことです。

struct foo
{
};

MS VSでは、いくつかのエラーがスローされます。

エラーC2016:Cでは、構造体または共用体に少なくとも1つのメンバーが必要です

ただし、同じコードをコンパイルする場合、gcc -Wall -Werrorエラーは発生しません。それで...

  1. これはCでは許可されていないという仕様を正しく読んでいますか?(そしてもっと驚くべきことに、Microsoftはそれを正しく理解しましたか?!)
  2. gccこの問題をキャッチするために渡すことができるオプションはありますか?
4

1 に答える 1

7
  1. はい、メンバーのない構造体型は C では無効です。

  2. -Werror -pedanticgcc翻訳を停止します。

于 2013-03-14T16:58:55.320 に答える