0

次のコードを検討してください。

enum 
{
        ERR_START,
        ERR_CANNOTOPENFILE, 
        ERR_CANNOTCONNECT, 
        ERR_CANNOTCONNECTWITH,
        ERR_CANNOTGETHOSTNAME,
        ERR_CANNOTSEND,

};

char* ERR_MESSAGE[] =
{
    [ERR_START]                     = "Nothing",
    [ERR_CANNOTOPENFILE]            = "Cannot open '%s' filename.\n",
    [ERR_CANNOTCONNECT]             = "Cannot connect.\n",
    [ERR_CANNOTCONNECTWITH]         = "Cannot connect with '%s'.\n",
    [ERR_CANNOTGETHOSTNAME]         = "Cannot get host name.\n",
    [ERR_CANNOTSEND]                = "Cannot send.\n",

};

このエラーを考えると:

error.h:27:1: error: parameter ‘ERR_MESSAGE’ is initialized
error.h:29:2: error: array index in non-array initializer
error.h:29:2: error: (near initialization for ‘ERR_MESSAGE’)
error.h:29:2: warning: initialization from incompatible pointer type
error.h:30:2: error: array index in non-array initializer
[....]

でコンパイルしてい-std=c99ます。

これを修正する方法は?

4

1 に答える 1

3

ファイル内の別の構文エラー (またはその前に含まれている何か) が原因で、このメッセージが表示されていると思います。コードをスタンドアロンの C ファイルに貼り付けたところ、コンパイル エラーは発生せgcc -std=c99 -c test.cず、GCC のバージョンはgcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2)です。

可能性のあるエラー (おそらく唯一のエラー) は、セミコロンがない関数宣言がある場合です。コード付き

enum 
{
        ERR_START,
        ERR_CANNOTOPENFILE, 
        ERR_CANNOTCONNECT, 
        ERR_CANNOTCONNECTWITH,
        ERR_CANNOTGETHOSTNAME,
        ERR_CANNOTSEND,

};

void foo()
char* ERR_MESSAGE[] =
{
    [ERR_START]                     = "Nothing",
    [ERR_CANNOTOPENFILE]            = "Cannot open '%s' filename.\n",
    [ERR_CANNOTCONNECT]             = "Cannot connect.\n",
    [ERR_CANNOTCONNECTWITH]         = "Cannot connect with '%s'.\n",
    [ERR_CANNOTGETHOSTNAME]         = "Cannot get host name.\n",
    [ERR_CANNOTSEND]                = "Cannot send.\n",

};

同様のエラーが発生します

est.c: In function ‘foo’:
test.c:13:1: error: parameter ‘ERR_MESSAGE’ is initialized
test.c:15:5: error: array index in non-array initializer
test.c:15:5: error: (near initialization for ‘ERR_MESSAGE’)
test.c:15:5: warning: initialization from incompatible pointer type [enabled by default]
test.c:15:5: warning: (near initialization for ‘ERR_MESSAGE’) [enabled by default]
test.c:16:5: error: array index in non-array initializer
test.c:16:5: error: (near initialization for ‘ERR_MESSAGE’)
test.c:16:5: warning: excess elements in scalar initializer [enabled by default]
test.c:16:5: warning: (near initialization for ‘ERR_MESSAGE’) [enabled by default]
[...]
于 2012-06-29T20:31:32.803 に答える