如何使用extern
时间: 2024-02-21 18:25:33 浏览: 22
extern是C语言中的一个关键字,用于声明一个变量或函数是在其他文件中定义的。它的作用是告诉编译器这个变量或函数在其他地方已经定义了,不需要重新定义。
具体使用extern的方法如下:
1. 声明外部变量:在某个文件中声明一个全局变量,但是不定义它,只是告诉编译器它在其他文件中已经定义了。例如,在文件A.c中声明一个外部变量x:
```c
extern int x;
```
然后在其他文件B.c中定义这个变量:
```c
int x = 10;
```
这样,在A.c中就可以使用变量x了。
2. 声明外部函数:在某个文件中声明一个函数,但是不定义它,只是告诉编译器它在其他文件中已经定义了。例如,在文件A.c中声明一个外部函数add:
```c
extern int add(int a, int b);
```
然后在其他文件B.c中定义这个函数:
```c
int add(int a, int b) {
return a + b;
}
```
这样,在A.c中就可以调用函数add了。
需要注意的是,extern只是用来声明变量或函数,不能在声明的同时初始化变量或定义函数的实现。另外,extern声明的变量或函数必须和实际定义的变量或函数具有相同的类型和参数列表。
相关问题
qt 使用extern
在 C++ 中,`extern` 关键字用于声明一个变量或函数是在其他文件中定义的。在 Qt 中,`extern` 通常用于在不同的源文件中共享对象或函数。
例如,如果你在一个源文件中定义了一个全局变量,而另一个源文件需要访问该变量,则可以在后者中使用 `extern` 关键字来声明该变量:
```cpp
// file1.cpp
int globalVar = 42;
```
```cpp
// file2.cpp
extern int globalVar;
```
这告诉编译器,`globalVar` 变量在其他文件中定义,因此编译器应该在连接时查找这个变量的定义。
同样,当你在一个源文件中定义了一个函数,但想在另一个源文件中使用该函数时,也可以使用 `extern` 来声明该函数:
```cpp
// file1.cpp
void myFunction() {
// ...
}
```
```cpp
// file2.cpp
extern void myFunction();
```
这告诉编译器,`myFunction` 函数在其他文件中定义,因此编译器应该在连接时查找该函数的定义。
在 Qt 中,`extern` 通常用于在不同的源文件中共享全局变量或函数。例如,在一个 Qt 应用程序中,你可能会在一个源文件中定义了一个全局变量,而在另一个源文件中定义了一个函数,该函数需要访问该全局变量。在这种情况下,你可以在函数所在的源文件中使用 `extern` 来声明全局变量,以便在连接时查找该全局变量的定义。
```cpp
// file1.cpp
int globalVar = 42;
```
```cpp
// file2.cpp
extern int globalVar;
void myFunction() {
// 使用 globalVar 变量
}
```
怎么使用extern C
在 C++ 中,extern "C" 是一种指示编译器按照 C 语言规则进行函数命名和链接的方式。在使用 C++ 编译器的情况下,如果一个函数没有使用 extern "C",则编译器会按照 C++ 的命名规则生成函数名。而在 C 语言中,函数名是以 C 语言的方式进行命名的。
如果您需要在 C++ 中调用 C 语言编写的函数,或者将 C++ 编写的函数作为库函数供 C 语言调用,就需要使用 extern "C" 来指定使用 C 语言的命名规则。
下面是一个使用 extern "C" 的示例:
```
#ifdef __cplusplus
extern "C" {
#endif
// C 语言编写的函数声明
void my_c_function(int arg);
#ifdef __cplusplus
}
#endif
```
在上面的示例中,#ifdef __cplusplus 和 #endif 之间的代码将被 C++ 编译器忽略,而在这之间的函数声明则指定了使用 C 语言的命名规则进行编译和链接。
在实际代码中,您只需要在 C 语言函数的声明前加上 extern "C",就可以使用 C 语言的命名规则编译和链接它们了。例如:
```
extern "C" {
void my_c_function(int arg);
}
```
这样,在 C++ 中就可以正确调用 my_c_function 函数了。