c 语言中的 extern 关键字
本文将演示关于如何在 c 语言中使用 extern
关键字的多种方法。
c 语言中使用 extern
关键字来声明一个在其他文件中定义的变量
一般来说,c 语言的变量有 3 种不同的链接类型:外部链接、内部链接或无链接。如果一个变量定义在块或函数范围内,就认为它没有链接。一个具有文件作用域的变量可以有内部链接或外部链接。也就是说,如果一个全局变量用 static
限定符声明,它就具有内部链接,意味着该变量可以在一个源文件(更准确的说是翻译单元)中使用。没有 static
限定符的全局变量被认为具有外部链接,可以在不同的源文件中使用。如果要使用在其他源文件中定义的全局变量,应该使用关键字 extern
来声明。
#include #include #ifndef count
#define count 10
#endif
extern int counter;
int main(void) {
printf("counter: ");
for (int i = 0; i < count; i) {
counter = 1;
printf("%d, ", counter);
}
printf("\b\b\n");
exit(exit_success);
}
输出:
counter: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
extern
限定变量通常定义在不同文件的某个地方。不过,从技术上讲,我们还是可以在同一个文件中使用 extern
关键字来声明全局变量,如下例所示。这种类型的声明本质上是多余的,因为编译器会自动使变量名在同一文件范围内的任何地方可见。
#include #include #ifndef count
#define count 10
#endif
int counter2 = 0;
int main(void) {
extern int counter2; //redundant
counter2 = 10;
printf("%d\n", counter2);
exit(exit_success);
}
不过要注意,extern
声明的变量不应该被初始化,因为如果我们在一个源文件中定义 const char*
全局变量,然后用一些字符串文字值初始化它,会导致编译器警告。在不同的源文件中声明同一个没有 const
修饰符的变量,在编译时不会出现警告,而且会删除对象的 const 性。因此,如果用户试图修改只读字符串 tmp
,编译器不会抛出错误,但程序会遇到分段故障。
#include #include #ifndef count
#define count 10
#endif
extern int counter;
//extern int counter = 3; // erroreous
extern char *tmp; // erroreous
int counter2 = 0;
int main(void) {
printf("counter: ");
for (int i = 0; i < count; i) {
counter = 1;
printf("%d, ", counter);
}
printf("\b\b\n");
tmp[0] = 's'; // segmentation fault
printf("%s", tmp);
exit(exit_success);
}
转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处
本文地址:
相关文章
在c中将整数转换为字符
发布时间:2024/01/03 浏览次数:131 分类:c语言
-
本教程介绍了在c中将整数转换为字符的不同方法。在c编程语言中,将整数转换为字符在各种情况下都很重要。在c中,字符是以ascii值表示的,因此转换过程相对简单。
发布时间:2023/05/07 浏览次数:364 分类:c语言
-
本文介绍了如何在 c 语言中使用 typedef enum。使用 enum 在 c 语言中定义命名整数常量 enum 关键字定义了一种叫做枚举的特殊类型。
发布时间:2023/05/07 浏览次数:129 分类:c语言
-
本文演示了如何在 c 语言中使用前缀增量与后缀增量运算符。c 语言中 i 和 i 记号的主要区别
发布时间:2023/05/07 浏览次数:275 分类:c语言
-
本文演示了如何在 c 语言中获取当前工作目录。使用 getcwd 函数获取当前工作目录的方法
发布时间:2023/05/07 浏览次数:177 分类:c语言
-
本文介绍了如何在 c 语言中使用位掩码。使用 struct 关键字在 c 语言中定义位掩码数据
发布时间:2023/05/07 浏览次数:212 分类:c语言
-
本文演示了如何在 c 语言中使用标准库排序函数。使用 qsort 函数对 c 语言中的整数数组进行排序
发布时间:2023/05/07 浏览次数:267 分类:c语言
-
本文介绍了如何在 c 语言中使用 ifndef。在 c 语言中使用 ifndef 保护头文件不被多次包含 c 语言中的头文件用于定义同名源文件中实现的函数的接口。