“旧式参数声明”错误

时间:2016-04-13 18:59:09

标签: c

我在尝试编译代码时遇到两个编译错误,但我找不到问题所在。有人可以帮忙解决一些问题吗?

error: old-style parameter declarations in prototyped function definition
error: 'i' undeclared (first use in this function)

代码:

void printRecords (STUREC records[], int count)

STUREC records[ARRAY_MAX];
int count;
int i;
{
    printf("+---------------------------+--------+--------+--------+--------+--------+--------+---------+-------+\n");
    printf("| Student Name | ID | Test 1 | Test 2 | Proj 1 | Proj 2 | Proj 3 | Average | Grade |\n");
    printf("+---------------------------+--------+--------+--------+--------+--------+--------+---------+-------+\n");

    for (i = 0; i < count; i++)
    {
        size_t j;
        printf ("|%s|%d|%d|%d|%d|%d|%d|%f|%c|", records[i].name, records[i].id, records[i].score1,
                 records[i].score2, records[i].score3, records[i].score4, records[i].score5,
                  records[i].ave, records[i].grade);
    }

    return;
}

2 个答案:

答案 0 :(得分:1)

不是针对这个特定问题,但如果您碰巧遇到此错误,请检查您是否在声明末尾没有遗漏分号,因为这就是我遇到的情况。

答案 1 :(得分:0)

如果您想使用old style C parameter declarations,则需要执行此操作:

void printRecords(records, count)
    STUREC records[ARRAY_MAX];
    int count;
{
    int i;
    // ... rest of the code ...
}

但这不是一种好的做法,可能会使您的代码难以阅读。有些编译器甚至停止支持这种语法。

其他评论/答案是说你重新声明(并因此隐藏)你的函数体中的函数参数,但这不是你想要做的(否则你有效丢失传入的参数。)

如果您定义这样的函数:

void fxn(int num) {
    int num;
    num = num;
}

num引用什么:参数或局部变量?

要么这样做:

void printRecords(records, count)
    STUREC records[ARRAY_MAX];
    int count;
{
    int i;
    // ... rest of the code ...
}

或者这样做:

void printRecords(STUREC records[], int count)
{
    int i;
    // ... rest of the code ...
}

但不要试图同时做两者或两者的混合。