extern 修饰一个函数
时间: 2024-06-20 19:03:09 浏览: 79
extern是一个关键字,它用于修饰变量和函数。当extern修饰一个函数时,它告诉编译器该函数是在其他文件中定义的,这样编译器在编译当前文件时就不会生成该函数的代码。而是在链接时将该函数的地址替换为定义它的文件中的地址。这种方式可以使得多个文件共享同一个函数,减小代码的冗余。通常来说,我们可以将函数声明放在头文件中,并在需要使用该函数的文件中通过#include指令引入该头文件来使用外部函数。
举个例子,假设我们有两个源文件foo.c和bar.c,foo.c中定义了一个函数func1(),bar.c需要调用func1()。如果我们在bar.c中使用extern声明func1(),并在bar.c中引入foo.h头文件,则编译器会将func1()的调用地址保存下来,在链接时再将它与foo.c中定义的实际函数地址联系起来。
相关问题
extern修饰函数
extern修饰函数是用来说明函数的定义和声明的关系。在C语言中,可以在一个文件中声明一个函数而在另一个文件中定义它。这样的话,需要在函数的声明前加上extern关键字,告诉编译器该函数是在其他文件中定义的。
例如,在一个文件中声明一个全局函数如下:
extern void myFunction();
然后在另一个文件中定义该函数:
void myFunction() {
// 函数的实现
}
这样,在编译时,编译器就知道myFunction函数是在其他文件中定义的,并会在链接阶段将其正确地连接到调用它的文件中。如果没有extern关键字,编译器会在当前文件中查找函数的定义,找不到则报错。
需要注意的是,对于局部函数(函数内部定义的函数),不能使用extern修饰,因为它们只在当前文件中可见。
在头文件中用extern修饰函数的声明有什么用处?请说明并用代码举例
使用`extern`关键字修饰函数的声明,可以让多个源文件共享同一个函数定义,避免在每个源文件中都重复定义相同的函数,从而减小程序的代码冗余度。
具体来说,当一个源文件需要调用另一个源文件中定义的函数时,可以在调用函数的源文件中使用`extern`关键字声明该函数,告诉编译器该函数的定义在其他源文件中,编译器在链接时会将所有需要的函数定义链接在一起,生成可执行文件。
以下是一个简单的示例:
假设我们有两个源文件`main.c`和`func.c`,`func.c`中定义了一个函数`add`,在`main.c`中需要调用`add`函数,我们可以在`main.c`中使用`extern`关键字声明`add`函数,避免在`main.c`中重复定义`add`函数。
`func.c`的代码如下:
```c
// 定义函数add
int add(int a, int b) {
return a + b;
}
```
`main.c`的代码如下:
```c
#include <stdio.h>
// 使用extern声明函数add
extern int add(int a, int b);
int main() {
int result = add(1, 2);
printf("1 + 2 = %d\n", result);
return 0;
}
```
在编译时,我们需要将`main.c`和`func.c`一起编译:
```
gcc main.c func.c -o main
```
编译器会将`main.c`中使用`extern`声明的`add`函数与`func.c`中定义的`add`函数链接在一起,生成可执行文件`main`,运行该程序会输出`1 + 2 = 3`。
阅读全文