对于C语言头文件里面extern的理解

本文详细介绍了在C语言开发中如何在不同文件间引用变量,包括如何使用H文件进行变量声明与导入,以及注意事项,如避免同名变量冲突,了解变量声明与宏定义的区别。

如果想在一个C文件里面引用另外一个C文件里面的变量,怎!么!办?

我们的做法是将变量在H文件中声明为ertern,然后在其他文件中导入这个H文件。

这里需要注意的是,如果导入了H文件,那就不能声明同名的变量了。


另外,H文件中的声明变量必须是在别的文件里面已经声明过的。这里特别强调变!量!

如上图。

左边是H文件,里面声明的一个ppp变量。在右边的文件里面引入H文件。但是!这个ppp变量是不能直接用的。

 warning: data definition has no type or storage class [enabled by default]
 ppp = 1;
 ^

这个ppp实际上还是未定义的变量。所以H文件出现不带extern的变量声明是没有意义的。

但是宏定义和typedef都是可以在H文件里面的。如果在H文件里面已经typedef的,在导入H的C文件里面就可以直接用了,而且在次typedef就是重复。


所以这里总结一下H文件里面有什么。

1 #define

2typedef

3extern 变量

4函数声明


在C语言中,`extern` 关键字在头文件里有重要用途,以下是其使用方法: ### 引用其他模块的函数 若文件 `a.c` 要引用 `b.c` 中的函数,比如在 `b.c` 中函数原型为 `int fun(int mu)`,可在 `a.c` 对应的头文件(假设为 `a.h`)里声明 `extern int fun(int mu)`。之后在 `a.c` 里包含 `a.h` 头文件,就能使用 `fun` 函数。`extern int fun(int mu)` 可放在 `a.h` 任意位置,不局限于文件作用域范围。示例如下: ```c // b.c int fun(int mu) { return mu * 2; } // a.h extern int fun(int mu); // a.c #include "a.h" #include <stdio.h> int main() { int result = fun(5); printf("Result: %d\n", result); return 0; } ``` 这种引用方式比包含声明函数的头文件更简洁,能加速程序编译(确切说是预处理)过程,在大型C程序编译时,差异明显[^1][^3]。 ### 引用其他模块的变量 若文件 `a.c` 要引用 `b.c` 中的变量,比如在 `b.c` 中定义了 `int var = 10;`,可在 `a.h` 中声明 `extern int var;`,接着在 `a.c` 里包含 `a.h` 头文件,就能使用 `var` 变量。示例如下: ```c // b.c int var = 10; // a.h extern int var; // a.c #include "a.h" #include <stdio.h> int main() { printf("Value of var: %d\n", var); return 0; } ``` ### 配合头文件提供声明 `extern` 可配合头文件文件内所需的变量、函数、结构体等声明出来,供其他功能使用。可在 `.h` 头文件中用 `extern` 声明变量、函数等,让其他文件包含该头文件后使用这些声明[^2]。 ### 指示C或者C++函数的调用规范 在C++中调用C库函数,需在C++程序里用 `extern "C"` 来指示调用规范。示例如下: ```cpp // C库函数声明 // c_library.h #ifdef __cplusplus extern "C" { #endif void c_function(); #ifdef __cplusplus } #endif // C++程序 // main.cpp #include "c_library.h" int main() { c_function(); return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值