13

例をコンパイル (gcc 4.6.3、ubuntu) すると、次の警告メッセージが表示されます。

struct {
} a;

int main() 
{
}


warning: anonymous type with no linkage used to declare variable ‘<anonymous struct> a’ with linkage [enabled by default].

GCC はこの警告を出しません。G++ のみが行います。

staticを追加すると、警告がクリアされます。

static struct {
} a;

私はそれが何を意味するのか理解できませんでしtypelinkage。リンケージは、変数がどこでどのように宣言されているかに依存すると思いましたが、変数自体の型には依存しませんでした。

4

2 に答える 2

8

aエラーは、匿名型 (構造体の後に型名がない) を持つ変数を宣言しているためです。警告は、(decltype を使用せずに) その型の変数を再度宣言できないためであると想定しています。C ++がより厳密な言語になる傾向があるためg++ではなく、警告が表示されると思います。gccまた、 と を使用してテストしましたがclang++clangを使用しても警告は表示されません-Wall

static はその1つのファイルでしか使用できないため(つまり、外部リンケージがないため)、警告を取り除くとa思います。別のファイルで使用するのは難しいでしょう。タイプがわからないか、メンバーにアクセスできないからです。 .

編集:残念ながら、警告のリンクによると、実際にはバグ (マイナーですが) であり、修正されています。

于 2013-07-29T01:26:06.213 に答える