Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >头文件为什么不能定义变量

头文件为什么不能定义变量

作者头像
用户9736681
发布于 2022-05-11 00:26:18
发布于 2022-05-11 00:26:18
1.2K00
代码可运行
举报
文章被收录于专栏:嵌入式随笔嵌入式随笔
运行总次数:0
代码可运行

在头文件里使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifndef 
#define 
#endif

可以避免重复定义,可是如果在其中定义变量向下面这样

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#ifndef _TEST_H
#define _TEST_H
int a;
#endif

如果有多个文件引用了这个头文件的话就会提示重复定义。

这是因为编译器需要经过预处理、编译、汇编、连接才可以生成可执行程序,在编译器执行链接这一步骤时,就会将工程中所有的符号整合在一起,由于文件中有重名变量,于是就出现了重复定义的错误。

但是如果需要使用的全局变量较多的话,放在主文件前面显得比较臃肿,如果想使用这些全局变量有不想使用大量的extern的话,可以单独建一个.c文件,将需要的变量放入其中,然后建一个头文件(.h文件)在所有的变量声明前加上extern。注意extern只是一个声明,在这句声明的语句中不要初始化赋值。然后在需要调用这些变量的文件中声明调用这个.h文件就可以了。这样就可以达到目的了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C语言-了解程序环境和预处理看这一篇(超详解)
在ANSIC的任何一种实现中,都会存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令,第2种是执行环境,它用于实际执行代码。如下图所示:
HABuo
2024/11/19
1090
C语言-了解程序环境和预处理看这一篇(超详解)
头文件里面的ifndef /define/endif的作用
大概是以前没有学好吧,对这里不是很理解,为什么要用这些呢?刚才上网查了查,借鉴了点高手的,自己总结了一点,就写在这里了,有什么错误之处,请大侠们指出
全栈程序员站长
2022/07/15
6540
【头文件】对.h文件的理解
在编译器只认识.c(.cpp)文件的年代,人们发现很多.c(.cpp)文件中的声明语句是相同的,但需要重复地敲入每个文件中,导致维护困难。为了解决这个问题,人们将重复的部分提取出来放在一个新文件中,即“头文件”,通常使用.h扩展名。这些头文件包含了变量和函数的全局性声明,被其他.c文件共享,方便修改和维护大型代码。因此,头文件中通常只包含声明而很少包含具体实现的代码。
SarPro
2024/04/25
3800
extern、定义和声明
    整体是函数的定义  ,函数的定义没有分号 而且要加上一对花括号 ,里边是函数的实现。
Twcat_tree
2022/11/30
1.3K0
extern、定义和声明
【C语言】头文件命名详解 - 《铁头无敌 ! 》
在C语言编程中,头文件(Header files)是一个重要的组成部分。它们通常包含函数原型、宏定义、结构声明和其他用于程序编译的信息。头文件通过预处理指令 #include 被包含到源文件中。本文将详细介绍C语言头文件的命名约定、使用方法及相关注意事项。
LuckiBit
2024/12/11
2000
编译和链接
        一个C语言的项目中可能有多个 .c 文件一起构建,那多个 .c 文件如何生成可执行程序呢
用户11328191
2024/10/23
1080
编译和链接
C++面试高频考点:inline的深层理解与实战应用
您好,我是昊天,国内某头部音频公司的C++主程,多年的音视频开发经验,熟悉Qt、FFmpeg、OpenGL。
程序员的园
2025/04/10
1300
C++面试高频考点:inline的深层理解与实战应用
C语言深入理解extern用法 | 变量声明 | static
我们一般把所有的全局变量和全局函数的实现都放在一个*.cpp文件里面,然后用一个同名的*.h文件包含所有的函数和变量的声明。如:
CtrlX
2022/11/22
1.9K0
C/C++头文件的作用和用法
示例代码编译运行环境:Windows 64bits+VS2017+Debug+Win32。
恋喵大鲤鱼
2018/08/03
4.5K0
extern关键字
extern是c++引入的一个关键字,它可以应用于一个全局变量,函数或模板声明,说明该符号具有外部链接(external linkage)属性。也就是说,这个符号在别处定义。一般而言,C++全局变量的作用范围仅限于当前的文件,但同时C++也支持分离式编译,允许将程序分割为若干个文件被独立编译。于是就需要在文件间共享数据,这里extern就发挥了作用。
司空
2022/09/08
2.7K0
编译和链接
那翻译环境是怎么将源代码转换为可执行的机器指令的呢?这里我们就得展开开讲解⼀下翻译环境所做的事情。
Crossoads
2024/10/21
890
编译和链接
【C语言】程序环境和预编译
任何一个C语言程序在执行时,都会存在两个不同的环境。 第一个是翻译环境:在这个环境中C程序的源代码会被转换为可执行的机器指令(二进制指令) 第二个是执行环境:它用于实际执行代码
举杯邀明月
2023/04/12
7670
【C语言】程序环境和预编译
详细剖析 extern "C"
这好像没有什么问题,你应该还会想:“嗯⋯是啊,我们的代码都是这样写的,从来没有因此碰到过什么麻烦啊~”。
C语言与CPP编程
2021/01/25
1.4K0
程序员C语言快速上手——进阶篇(八)
过程式、模块化的C语言程序是由多个源文件(.c文件)构成的,在每一个源文件中,都形成一个文件作用域。所谓作用域,实际上就是指有效范围。一旦离开这个源文件的范围,就相当于离开了该源文件的文件作用域。在源文件中定义函数,那么在函数之外的地方,就属于全局作用域,即使是多个源文件,只要在函数之外,那它们就都属于全局作用域,全局作用域,全局都可访问。而在函数之内的空间声明变量,那它属于局部作用域。
arcticfox
2019/07/10
9760
【C语言】C语言的变量和声明系统性讲解
在C语言中,**声明(Declaration)和定义(Definition)**是两个重要的基础概念,它们都涉及到变量、函数、结构体等的使用,但功能和作用存在明显区别:
LuckiBit
2024/12/11
2300
【C语言】C语言的变量和声明系统性讲解
初识C语言·编译与链接
C语言标准ANSI C 实现C语言代码的时候 一般需要经过两种环境,一是翻译环境,二是运行环境,计算机能识别的是二进制的指令,人写完代码后通过翻译环境,使代码变成计算机能读懂的可执行的机器指令,运行环境就是用来执行实际的代码操作的环境。
_lazy
2024/10/16
1180
初识C语言·编译与链接
extern关键字详解
extern放在变量或者函数之前,表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
WindSun
2019/08/29
1.8K0
C/C++ 自定义头文件,及头文件结构详解
在之前介绍的大部分C语言语法基础的章节中列举的实例代码部分,都会在源文件的开始的第一行通过#include预处理指令包含进"stdio.h",后面这个".h"后缀名的就是头文件了。而什么是头文件呢?
用户9470376
2024/04/10
1.9K0
C语言头文件组织与包含原则
如非特殊说明,文中“源文件”指 * .c文件,“头文件”指 *.h文件,“引用”指包含头文件。
C语言与CPP编程
2020/12/10
5.4K1
C语言头文件组织与包含原则
【C语言基础】:编译和链接(计算机中的翻译官)
我们在Visual Studio上写的C语言代码其实都是一些文本信息,计算机是不能够直接执行他们的,计算机只能够执行二进制指令。 要想计算机执行我们所写的C语言代码,就需要一个"翻译官",将我们写的C语言代码"翻译"成计算机能够执行的二进制指令。而承当"翻译官"这个角色的就是我们常说的编译器。
爱喝兽奶的熊孩子
2024/04/15
1740
【C语言基础】:编译和链接(计算机中的翻译官)
相关推荐
C语言-了解程序环境和预处理看这一篇(超详解)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验