初始化类型结构数组

时间:2014-10-01 07:42:12

标签: c

    enum denomination
    {
        FIVE_CENTS, TEN_CENTS, TWENTY_CENTS, FIFTY_CENTS, ONE_DOLLAR, 
        TWO_DOLLARS, FIVE_DOLLARS, TEN_DOLLARS
    };

    struct DENOM_NAME
    {
        char name[MAX_NAME];
        enum denomination denom;
    };

    /* Table of names and matching denominations */
    static struct DENOM_NAME denomTable[8] = {
        { "5",  FIVE_CENTS },
        { "10",  TEN_CENTS },
        { "20", TWENTY_CENTS },
        { "50", FIFTY_CENTS },
        { "100", ONE_DOLLAR },
        { "200", TWO_DOLLARS },
        { "500", FIVE_DOLLARS },
        { "1000", TEN_DOLLARS }
    };

我已经知道允许使用值初始化数组,但不知何故编译器抱怨混合声明和代码(c90顺便说一句)。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您可以使用以下代码从C89 / C90编译器获取错误:

void function(void)
{
    int i = 23;         /* OK - initialization */
    printf("%d\n", i);  /* OK - executable statement (code) */
    enum denomination   /* BAD - declaration mixed with code */
    {
        FIVE_CENTS, TEN_CENTS, TWENTY_CENTS, FIFTY_CENTS, ONE_DOLLAR, 
        TWO_DOLLARS, FIVE_DOLLARS, TEN_DOLLARS
    };
    …

您可以在错误开始的行之前进行普通函数调用,赋值,杂散额外分号或其他内容。

请注意,C99和C11遵循C ++的引导,并允许(几乎)函数(语句块)中的任何点处的变量定义。上面的大纲代码在C99和C11中都很好。