C语言中,`extern` 和 `#include`

C语言中,extern#include

1. #include

#include 是C语言中的预处理指令,用于将指定文件的内容插入到当前文件中。通常用于包含头文件(.h 文件),头文件中通常包含函数声明、宏定义、类型定义等。

使用场景:

  • 将函数声明、宏定义、结构体定义等共享内容放在头文件中。
  • 在多个源文件中共享相同的声明或定义。

示例:

头文件 functions.h
c 复制代码
#ifndef FUNCTIONS_H
#define FUNCTIONS_H

// 函数声明
void demo();

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

#endif
源文件 functions.c
c 复制代码
#include <stdio.h>
#include "functions.h"

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

// 函数定义
void demo() {
    printf("This is the demo function.\n");
}
主文件 main.c
c 复制代码
#include "functions.h"

int main() {
    demo();  // 调用函数
    globalVar = 20;  // 修改全局变量
    printf("Global variable value: %d\n", globalVar);
    return 0;
}

特点:

  • #include 是将头文件的内容直接插入到当前文件中。
  • 适合共享函数声明、宏定义、结构体定义等。
  • 头文件通常使用 #ifndef#define#endif 防止重复包含。

2. extern

extern 是C语言中的关键字,用于声明一个变量或函数是在其他文件中定义的。它告诉编译器:"这个变量或函数的定义在其他地方,不要在这里分配存储空间。"

使用场景:

  • 在多个源文件中共享全局变量。
  • 在头文件中声明全局变量或函数,避免重复定义。

示例:

头文件 globals.h
c 复制代码
#ifndef GLOBALS_H
#define GLOBALS_H

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

// 函数声明
void demo();

#endif
源文件 globals.c
c 复制代码
#include <stdio.h>
#include "globals.h"

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

// 函数定义
void demo() {
    printf("This is the demo function.\n");
}
主文件 main.c
c 复制代码
#include "globals.h"

int main() {
    demo();  // 调用函数
    globalVar = 20;  // 修改全局变量
    printf("Global variable value: %d\n", globalVar);
    return 0;
}

特点:

  • extern 只是声明变量或函数的存在,不会分配存储空间。
  • 适合在多个源文件中共享全局变量。
  • 通常与头文件一起使用,避免重复定义。

3. #includeextern 的区别

特性 #include extern
作用 将指定文件的内容插入到当前文件中。 声明变量或函数是在其他文件中定义的。
使用场景 共享函数声明、宏定义、结构体定义等。 共享全局变量或函数声明。
存储空间分配 不涉及存储空间分配。 不涉及存储空间分配。
文件类型 通常用于头文件(.h 文件)。 可以用于头文件或源文件。
重复包含问题 需要使用 #ifndef 防止重复包含。 无重复包含问题。

4. 如何选择使用 #includeextern

使用 #include 的情况:

  • 需要共享函数声明、宏定义、结构体定义等。
  • 需要将多个源文件共享的内容集中到一个头文件中。

使用 extern 的情况:

  • 需要在多个源文件中共享全局变量。
  • 需要在头文件中声明全局变量或函数,避免重复定义。

5. 综合示例

文件结构:

复制代码
project/
├── main.c
├── globals.h
└── globals.c
头文件 globals.h
c 复制代码
#ifndef GLOBALS_H
#define GLOBALS_H

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

// 函数声明
void demo();

#endif
源文件 globals.c
c 复制代码
#include <stdio.h>
#include "globals.h"

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

// 函数定义
void demo() {
    printf("This is the demo function.\n");
}
主文件 main.c
c 复制代码
#include "globals.h"

int main() {
    demo();  // 调用函数
    globalVar = 20;  // 修改全局变量
    printf("Global variable value: %d\n", globalVar);
    return 0;
}

输出:

复制代码
This is the demo function.
Global variable value: 20

总结

  • #include 用于将文件内容插入到当前文件中,适合共享函数声明、宏定义等。
  • extern 用于声明变量或函数是在其他文件中定义的,适合共享全局变量。
  • 在实际项目中,通常会将 #includeextern 结合使用,以实现模块化编程和代码共享。
相关推荐
钱彬 (Qian Bin)9 分钟前
一文掌握Qt Quick数字图像处理项目开发(基于Qt 6.9 C++和QML,代码开源)
c++·开源·qml·qt quick·qt6.9·数字图像处理项目·美观界面
guygg8831 分钟前
基于matlab的FIR滤波器
开发语言·算法·matlab
双叶8361 小时前
(C++)学生管理系统(正式版)(map数组的应用)(string应用)(引用)(文件储存的应用)(C++教学)(C++项目)
c语言·开发语言·数据结构·c++
源代码•宸1 小时前
C++高频知识点(二)
开发语言·c++·经验分享
ysh98881 小时前
PP-OCR:一款实用的超轻量级OCR系统
算法
遇雪长安1 小时前
差分定位技术:原理、分类与应用场景
算法·分类·数据挖掘·rtk·差分定位
数通Dinner1 小时前
RSTP 拓扑收敛机制
网络·网络协议·tcp/ip·算法·信息与通信
jyan_敬言2 小时前
【C++】string类(二)相关接口介绍及其使用
android·开发语言·c++·青少年编程·visual studio
is08153 小时前
STM32的 syscalls.c 和 sysmem.c
c语言·stm32·嵌入式硬件
liulilittle3 小时前
SNIProxy 轻量级匿名CDN代理架构与实现
开发语言·网络·c++·网关·架构·cdn·通信