extern是定义还是声明的时候使用
时间: 2024-05-12 09:15:05 浏览: 58
在C语言中,`extern`关键字可以用于声明一个变量或函数,而不是定义它们。具体来说,当我们在一个文件中使用`extern`关键字声明一个变量或函数时,这意味着该变量或函数的定义在另一个文件中,编译器在链接时会去寻找它们的定义。
例如,在文件a.c中定义了一个全局变量`int x = 5;`,在文件b.c中需要使用这个变量,但是不想在b.c中重新定义这个变量,那么我们可以在b.c中使用`extern`关键字进行声明,如下所示:
```
// a.c
int x = 5;
// b.c
extern int x; // 声明 x 变量,告诉编译器 x 的定义在别处
int main() {
printf("%d", x); // 输出 5
return 0;
}
```
需要注意的是,`extern`关键字只能用于全局变量和函数的声明,不能用于局部变量的声明。
相关问题
extern "C"用于声明还是用于定义
`extern "C"`是用于声明一个函数或变量的,它的作用是告诉编译器这个函数或变量按照 C 语言的方式进行链接,而不是 C++ 的方式。在 C++ 中,函数的名称会根据函数的参数类型和个数进行重载,而在 C 语言中,函数的名称不带参数信息,因此使用 `extern "C"` 可以避免函数名重载导致的链接错误。
例如,在 C++ 中,下面两个函数声明会被认为是不同的函数:
```
void foo(int);
void foo(float);
```
而在 C 语言中,这两个函数声明会被认为是相同的函数:
```
void foo(int);
void foo(float); // 会被认为是重复声明
```
因此,如果需要在 C++ 中调用 C 语言编写的函数,需要在函数声明中使用 `extern "C"`,例如:
```
extern "C" void foo(int);
```
这样声明的函数会按照 C 语言的方式进行链接,可以在 C++ 中使用。同时,需要注意的是,`extern "C"`只是声明,不是定义,需要在其他地方进行定义。
使用extern关键字声明的变量代表什么
使用extern关键字声明的变量,代表该变量并不是在当前的文件中定义,而是在其它文件中定义。通过使用extern关键字,可以在当前文件中引用其它文件中定义的变量,从而实现跨文件的变量共享。
在使用extern关键字声明变量时,只需要指定变量的类型和名称,而不需要指定变量的值,因为变量的值已经在其它文件中定义。例如:
```c++
extern int count; // count变量在其它文件中定义
```
在使用该变量时,需要保证其它文件中已经定义了该变量,并且该变量的作用域可以被当前文件访问到。通常情况下,可以在其它文件中使用该变量时,同样也需要使用extern关键字进行声明。