簡體   English   中英

定義一個未命名的結構是否合法?

[英]Is it legal to define an unnamed struct?

以下代碼是否合法?:

struct
{
    int  x;
};

此代碼只是定義了一個未命名的結構。 我不打算創建這種類型的對象,也不需要以任何其他方式使用此結構。 它只是在源中出現,作為一些復雜的宏擴展的副作用。

雖然沒用,但我認為沒有問題。 只是另一段代碼可以編譯然后完全優化。

然而,在現實世界中,結果與我的期望完全不同:

GCC 8.3報告錯誤:

error:抽象聲明符'<unnamed struct>'用作聲明

Clang 8.0.0也報告錯誤:

錯誤:匿名結構和類必須是類成員
警告:聲明不聲明任何內容[-Wmissing-declarations]

只有MSVC 2017認為此類來源沒有問題。

所以,問題是:誰是對的? 標准中是否有明確禁止此類聲明的相關引用?

編輯:
該項目使用C ++ 11。 但是C ++ 98,C ++ 11和C ++ 17的錯誤消息是相同的。

不,這是不允許的。 GCC和Clang是對的。

根據N3337(C ++ 11最終草案)中的 [dcl.dcl] / 3(7聲明) ,類聲明必須以一個名稱引入程序。 例如,以下內容無效:

enum { };
typedef class { }; 

(注意:這不是C ++ 11獨有的。在N4140(C ++ 14最終草案)中,它是[dcl.dcl] / 5(7聲明) 。在N4659 (C ++ 17最終草案)中,它是[dcl.dcl] / 5(10份聲明) 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM