struct states
{
float v, x;
};
struct
{
struct coeffs c1;
struct states s1;
} cands;
main()
{
// A:
cands.s1 = (struct states){ };
// B:
cands.s1 = (struct states){ 0 };
}
MicrosoftコンパイラはA(syntax error
)について文句を言いますが、Bでは正常に動作します。GCCはAについて文句を言いませんでした。
AとBのどちらが正しいですか?
AとBは同じですか?
構造体または共用体タイプのオブジェクトを初期化する場合、初期化子は、空でない、中括弧で囲まれた、メンバーの初期化子のコンマ区切りリストである必要があります。
【エンファシスマイン】
正しい選択肢はBです。
多くのコンパイラは通常、デフォルトで多くの非標準拡張機能を基本言語に追加します。このような拡張機能は移植性がないため、使用しないことをお勧めします。
GCCには、空の中括弧リストに対してそのような拡張機能があるようです。たとえば、-std=c11
ビルド時にオプションを追加すると、GCCはより厳密になり、非標準の拡張機能は使用されなくなります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加