为什么我不能在功能中第二次声明结构?

Qut*_*uto 2 c struct compiler-errors declaration

所以,我得到了一个函数,我声明一个已填充的结构,并且还要声明一个新函数.当我在顶部声明新函数时它起作用,当我在逗号(,)之后将它声明在同一行时,它可以工作,但它不适用于底线.有什么解释吗?提前致谢.

void CFilter(float avgprofit, int lines)
{
    //client goodclient[MAX_CLIENT]; THIS WOULD COMPILE
    client client[MAX_CLIENT], goodclient[MAX_CLIENT]; // THIS COMPILES
    //client goodclient[MAX_CLIENT]; THIS WOULDN'T COMPILE
    int i, amount = 0;
    float userprofit;
    for (i = 0; i <= lines; i++) {
        userprofit = client[i].loses - client[i].wins;
        if (userprofit >= avgprofit) {
            client[i].goodclient = 1;
        } else {
            client[i].goodclient = 0;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 5

问题是数组client的名称隐藏了类型的名称client.

client client[MAX_CLIENT];
client goodclient[MAX_CLIENT]; 
Run Code Online (Sandbox Code Playgroud)

因此,在第二个声明中,编译器将名称client视为数组的名称.

对不同的实体使用相同的名称不是一个好主意.

使编译器编译声明的最简单方法是重命名数组.

或者,如果类型clienttypedef具有相同名称的结构类型,那么您可以编写例如

client client[MAX_CLIENT];
struct client goodclient[MAX_CLIENT]; 
Run Code Online (Sandbox Code Playgroud)

另一种方法是交换声明

client goodclient[MAX_CLIENT]; 
client client[MAX_CLIENT];
Run Code Online (Sandbox Code Playgroud)