3

私は定義が嫌いです。古いコード ベースからそれらをできるだけ多く排除するために、配列を含む構造体を定義するためにenum-hackに頼る必要があります。残念ながら、問題のある .h ファイルが C プロジェクトに含まれている場合、コンパイルできません。

typedef struct _P_O {
    enum { MAXELEMENTS=10 };
    P_O_U elem;
    ULONG id[MAXELEMENTS];
    USHORT nid;
} P_O, *PP_O;

これにより、エラーC2208が生成されます。

'type' : この型を使用して定義されたメンバーはありません 型名
に解決される識別子が集約宣言に含まれていますが、コンパイラはメンバーを宣言できません。

OT: 私は 10 歳のコンパイラを使うのが嫌いで、古い C コードや悪い設計も維持しなければなりません。定義するだけではありません:)

4

2 に答える 2

6

質問のコードを考えると、GCC は次のように警告します: warning: declaration does not declare anythingenum 行について。

列挙型を構造体の外に配置すれば問題ありません。

typedef int P_O_U;
typedef unsigned long ULONG;
typedef unsigned short USHORT;

enum { MAXELEMENTS = 10 };

typedef struct _P_O
{
    P_O_U  elem;
    ULONG  id[MAXELEMENTS];
    USHORT nid;
} P_O, *PP_O;
于 2013-08-01T15:26:01.187 に答える