问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

详解C语言中的关键词:extern以及它需要注意的事项

创作时间:
作者:
@小白创作中心

详解C语言中的关键词:extern以及它需要注意的事项

引用
CSDN
1.
https://m.blog.csdn.net/wenhao_ir/article/details/144682259

在C语言开发中,extern关键字是一个重要的概念,它允许在不同源文件之间共享变量和函数。本文将详细介绍extern的作用、使用场景以及常见的误区,帮助开发者更好地理解和使用这一特性。

extern的作用

extern关键字主要用于声明变量或函数的外部链接性,即在当前文件中使用另一个文件中定义的变量或函数。具体作用如下:

  1. 跨文件访问extern告诉编译器,某个变量或函数是在另一个文件中定义的,当前文件只是引用它。需要注意的是,函数的声明其实默认就具有extern的默认属性,所以extern主要是对全局变量进行声明。
  2. 延迟定义:在文件中引用了某些全局变量或函数,但不在当前文件中定义它们,而是等待链接阶段找到其定义。

主要使用场景

用于变量的外部声明

extern主要用于跨文件访问全局变量。

例如:

文件1:global.c

#include <stdio.h>

int globalVar = 42; // 定义全局变量

文件2:main.c

#include <stdio.h>

// 声明外部变量
extern int globalVar;

int main() {
    printf("Value of globalVar: %d\n", globalVar); // 输出 42
    return 0;
}

解释:

  • main.c文件中,extern int globalVar;告诉编译器,globalVar是在另一个文件中定义的。
  • 链接阶段,编译器会将globalVar的引用解析到global.c中的定义。

用于函数的外部声明

虽然函数声明默认具有外部链接性,但你仍可以显式使用extern,尽管很少需要这样做。

例如:

extern void someFunction(void); // 明确声明某函数为外部定义

注意:函数的外部声明通常通过头文件实现,因此实际项目中很少需要手动写extern

控制全局变量的作用域

如果某个变量在一个文件中定义,但希望它仅在该文件中可见(即文件作用域),使用static定义;如果希望它能被其他文件访问,则用extern声明。

示例:

文件1:file1.c

#include <stdio.h>

int sharedVar = 100; // 定义全局变量,供其他文件使用
static int localVar = 200; // 仅限当前文件使用

文件2:file2.c

#include <stdio.h>

extern int sharedVar; // 引用 file1.c 中的全局变量

int main() {
    printf("sharedVar: %d\n", sharedVar); // 输出 100
    // printf("localVar: %d\n", localVar); // 错误:无法访问
    return 0;
}

解释:

  • sharedVar可以在其他文件中访问,因为它是全局变量,并且在file2.c中用extern声明。
  • localVar是静态变量,仅在file1.c中可见,其他文件无法引用。

常见误区

  1. 误以为extern是定义变量:
  • extern只是声明,告诉编译器这个变量在别处定义。
  • 如果在没有定义的情况下使用extern,会导致链接错误。
  1. 对局部变量使用extern
  • extern只能用于全局变量和函数。局部变量本身没有链接性,不能被extern声明。

总结

  • 作用:extern用于声明外部变量或函数,支持跨文件访问。
  • 使用场景:
  • 声明全局变量,避免重复定义。
  • 明确标识函数或变量的外部链接性。
  • 典型模式:extern声明在头文件中,定义在对应的源文件中。

在现代开发中,extern的使用更多体现在变量跨文件访问和接口声明通过头文件实现。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号