Goforyouqp  

extern是C/C++语言中的一个关键字,用于声明一个变量或函数具有外部链接性(external linkage),即这些变量或函数可以被其他文件访问。

在C/C++中,如果我们需要在不同的源文件中共享变量或函数,可以使用extern关键字来声明变量或函数。当我们在一个源文件中声明一个变量或函数为extern时,实际上是告诉编译器该变量或函数已在其他源文件中定义。这样,在链接过程中,编译器会为该变量或函数生成一个符号表,以便其他源文件可以正确地引用它。如果我们没有使用extern关键字,编译器在链接时会抛出一个“未定义引用”的错误。

下面是一些例子:

1. 声明全局变量:

//file1.c
#include <stdio.h>

int count = 0; //定义全局变量

//file2.c
#include <stdio.h>

extern int count; //声明全局变量

int main()
{
    count++; //对全局变量count进行操作
    printf("count is %d\n", count);
    return 0;
}

在该例子中,我们在`file1.c`文件中定义了一个全局变量`count`。在`file2.c`文件中,我们通过关键字`extern`声明了该变量,可以在`main()`函数中访问它并进行操作。

2. 声明函数:

//file1.c
#include <stdio.h>

void print() //定义函数print
{
    printf("Hello, World!\n");
}

//file2.c
#include <stdio.h>

extern void print(); //声明函数print

int main()
{
    print(); //调用函数print
    return 0;
}

在该例子中,我们在`file1.c`文件中定义了一个函数`print()`。在`file2.c`文件中,我们通过关键字`extern`声明了该函数,可以在`main()`函数中调用它。

当使用"extern"关键字时,有几个注意事项需要记住:

1. 声明和定义分离:使用"extern"关键字声明一个变量或函数并不等于定义它。"extern"只是在当前文件中声明该变量或函数是在其他地方定义的。定义通常发生在其他文件中。

2. 变量和函数的重复声明:避免在多个地方重复声明同一变量或函数。多次使用"extern"关键字声明同一变量或函数可能会导致编译器发出警告或错误。

3. 外部实现的可见性:使用"extern"关键字可以访问外部定义的变量和函数,但前提是它们在其他文件中具有合适的可见性。确保所需的变量和函数在其他文件中是可见的(例如,通过使用适当的头文件包含)。

4. 数据类型和函数签名的一致性:在使用"extern"关键字声明变量或函数时,确保其数据类型和函数签名与实际定义的变量或函数的数据类型和函数签名一致。否则,可能会导致编译器错误或运行时错误。

5. 避免重复定义:避免在多个文件中同时定义同一变量或函数。只需要在一个文件中定义,然后在其他文件中使用"extern"关键字声明。

6. 声明在适当的位置:"extern"关键字的声明通常放置在函数外部的全局区域,或者放置在函数内部的局部区域。根据需要和上下文,选择适当的位置。

7. 尽量避免全局变量:虽然"extern"关键字可以让我们在多个文件中共享变量,但过度使用全局变量可能导致代码可读性、可维护性和可测试性的问题。考虑使用更局部化的变量和传递参数的方式来避免过多使用全局变量。

综上所述,使用"extern"关键字时需要注意声明和定义的分离、重复声明、可见性、数据类型和函数签名的一致性、避免重复定义以及合理放置声明的位置。遵循这些注意事项可以确保正确使用"extern"关键字并避免潜在的问题。

总之,extern关键字用于声明一个变量或函数具有外部链接性,以便在不同的源文件中共享它们。

posted on 2023-06-20 21:28  嵌入式小白-小黑  阅读(131)  评论(0编辑  收藏  举报  来源