2

次のコードは正常にコンパイルおよび実行されます。

#include <stdio.h>

typedef int Someint;
typedef int Someint;

int main()
{
    Someint b = 4;
    printf("%d", b);
    return 0;
}

次のコードはコンパイルされません。それは私にエラーを与えていますconflicting types for 'Somestruct'

#include <stdio.h>

typedef struct
{
    int x;
}
Somestruct;

typedef struct
{
    int x;
}
Somestruct;

int main()
{
    Somestruct b;
    b.x = 4;
    printf("%d", b.x);
    return 0;
}

エラーなしで(最初のコードで)2回実行できるのに、typedef 別の(上記の構造)で同じことが失敗するのはなぜですか?2つのケースの違いは何ですか?CodeBlocks 12.11 に付属の MinGW コンパイラを使用しています。typeinttype

4

2 に答える 2

6

問題は、次の場合です。

typedef struct
{

} Somestruct;

匿名の構造体を作成します - typedef を指定するために、いくつかの非表示の実装定義の保証された一意のプレースホルダー識別子が使用されることを期待できます。したがって、これを 2 回行うと、2 つの異なる構造を参照するよう求められた同じ typedef 名を持つことで競合が発生します。ではint、単に元を繰り返しているだけです。構造体に実際の名前を付けると、typedef を繰り返すことができます。

typedef struct Somestruct
{

} Somestruct;
于 2013-05-07T09:05:08.060 に答える
5

匿名構造体を使用して typedef を定義しているため、両方の定義は異なります。

以下はこれを行わず、動作します。(一度しか定義できないことに注意してくださいstruct)

#include <stdio.h>

typedef struct foo
{
    int x;
}
Somestruct;

typedef struct foo Somestruct;
于 2013-05-07T09:06:08.877 に答える