c语言 extern用法


2023年12月18日发(作者:不看负债和征信的贷款)

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 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议