为什么在C语言中可以定义两次变量?

13 浏览
0 Comments

为什么在C语言中可以定义两次变量?

我一直在测试全局变量、定义和声明,并且在这种情况下停下来:

main.c:

#include "stdio.h"
void func(void);
int a;
int main(void) {
    a = 20;
    printf("in main: %d\n", a);
    func();
    return 0;
}

add.c:

#include 
void func(void);
int a;
void func() {
    printf("in add: %d\n", a);
}

在C语言中,这行代码`int a;`既是声明又是定义,但我们知道变量不能被定义多次。那么为什么这段代码能够编译通过,而且有两个定义和两个声明的`a`变量呢?

我在CLion中工作,当我在main中按下“转到定义/声明”按钮时,指针会移动到add.c中的`a`,当我在add.c中做同样的操作时,它会回到main.c,所以我无法理解这里发生了什么。

0