c语言 extern用法
什么是extern关键字?
在C语言中,`extern`是一个关键字,用于说明一个变量或函数在其他文件中定义。在别的文件中用`extern`来声明这个变量或函数,从而让编译器知道它是在其他文件中定义的。
`extern`关键字有几种用法?
1. 外部变量定义
当我们需要声明一个外部定义的变量时,使用`extern`关键字。外部定义的变量是指在全局范围内声明的变量,其作用域比较大,可以在不同的文件中使用。
在一个源文件中,我们可以用如下的方式定义一个外部变量:
int external_var = 0;
如果在其他文件中需要使用这个变量,可以用`extern`关键字声明该变量:
extern int external_var;
这个声明告诉编译器,这个变量已经在另一个文件中定义。在C语言中,除了函数参数以外的变量默认都是外部变量。
2. 外部函数定义
`extern`关键字也可以用于声明外部定义的函数。在不同的文件中,我们可以使用如下代码定义和声明一个函数:
在一个文件中定义函数
int sum(int a, int b) {
return a + b;
}
在另一个文件中声明函数
extern int sum(int a, int b);
这里的函数`sum()`在一个文件中被定义,而在其他文件中被声明。因为C语言中不允许在一个源文件中定义多个同名函数,因此需要使用`extern`声明重复的函数。
3. 引用已定义的外部变量
如果我们希望在一个文件中使用另一个文件中定义的外部变量,那么就需要使用`extern`关键字。以下是一个示例程序:
example1.c:
#include
int external_var = 5;
int main() {
extern int external_var; 声明在其他文件中定义的external_var变量
printf("The value of external_var is: %dn", external_var);
return 0;
}
example2.c:
extern int external_var; 在文件中声明external_var变量
int main() {
external_var = 10; 修改在其他文件中定义的external_var变量的值
return 0;
}
在`example1.c`文件中,我们定义了一个全局变量`external_var`。在`main()`函数中,我们通过`extern`声明引用了在`example2.c`中定义的变量。这个程序打印出此时`external_var`的值。在另一个文件中修改这个变量的值,将会影响到原来的程序。
4. 引用已定义的外部函数
我们也可以使用`extern`关键字来引用另一个文件中已经定义的外部函数。下面是一个示例:
example1.c:
#include
extern int sum(int a, int b); 声明在其他文件中定义的函数
int main() {
int result = sum(2, 3); 调用在其他文件中已经定义的sum()函数
printf("The result is: %dn", result);
return 0;
}
example2.c:
int sum(int a, int b) { 在其他文件中定义sum()函数
return a + b;
}
在`example1.c`文件中,我们通过`extern`声明引用了在`example2.c`中定义的`sum()`函数。在`main()`函数中,我们调用了这个函数。`sum()`函数的具体实现在另一个文件中,使用`extern`关键字在这里只是声明这个函数已经被定义。
5. 外部常量声明
最后一个`extern`关键字的用法是用来声明外部定义的常量。当我们声明一个在其他文件中定义的常量时,可以使用`extern`关键字。以下是一个例子:
example1.c:
#include
extern const int constant_var; 声明在其他文件中定义的常量
int main() {
printf("The value of constant_var is: %dn", constant_var);
return 0;
}
example2.c:
const int constant_var = 10; 在其他文件中定义constant_var常量
在`example1.c`文件中,我们通过`extern`声明引用了在`example2.c`中定义的`constant_var`常量。在`main()`函数中,我们打印了这个常量的值。由于这个常量在另一个文件中定义,我们使用`extern`来声明它。
什么是function_ptr[]?
`function_ptr[]`是一个函数指针数组。函数指针可以指向一个函数,通过函数指针可以实现对相同函数代码的重复使用。函数指针数组就是一个数组,元素类型是函数指针。
在C语言中,函数名是一个指针。因此,可以对一个函数名取地址,然后将这个函数指针存储到一个指针变量中。将函数指针放到数组中,就可以形成一个函数指针数组了。以下是一个示例:
#include
int sum(int a, int b) {
return a + b;
}
int sub(int a, int b) {
return a - b;
}
int mul(int a, int b) {
return a * b;
}
int main() {
int (*function_ptr[]) (int, int) = {&sum, &sub, &mul}; 定义函数指针数组
int result;
result = (*function_ptr[0])(2, 3); 调用sum函数指针
printf("The sum is: %dn", result);
result = (*function_ptr[1])(2, 3); 调用sub函数指针
printf("The sub is: %dn", result);
result = (*function_ptr[2])(2, 3); 调用mul函数指针
printf("The mul is: %dn", result);
return 0;
}
在这个示例程序中,我们定义了三个函数:`sum()`、`sub()`和`mul()`。接下来,我们创建`function_ptr[]`数组,元素类型是函数指针。我们用`&sum`、`&sub`和`&mul`来初始化这个数组。
在`main()`函数中,我们通过调用这个函数指针数组中的函数来验证这个数组。这里用到了函数指针调用语法`(*function_ptr[0])(2, 3)`,它会返回请求的函数值。
总结
`extern`是一个关键字,用来声明一个变量或者函数在其他文件中定义。我们可以使用`extern`来引用另一个文件中定义的变量或者函数,同时它也可以引用已
经定义的外部常量和声明外部函数。函数指针数组是一个数组,元素类型是函数指针。使用函数指针可以实现对相同函数代码的重复使用。
本文发布于:2024-09-24 06:21:00,感谢您对本站的认可!
本文链接:https://www.17tex.com/fanyi/11434.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |