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顺便说一句)。我该如何解决这个问题?
答案 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中都很好。