news 2026/10/24 1:47:43

Keil工程在h文件中定义变量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Keil工程在h文件中定义变量

Keil工程在h文件中定义变量

1. 背景

关于变量的定义,严谨的做法当然是在c文件中定义,h文件中声明。但总有人喜欢在h文件中定义全局变量,可能是喜欢集中管理全局变量,也可能是觉得一个变量要维护c和h两个地方太麻烦,总之有人有这个需求。

2. 思路

如果直接在h文件中定义就会在编译时报如下错误,也就是重复定义,这是因为有多个c文件包含了定义变量的h文件,每次包含都是一次定义,导致重复定义。

ERROR L104:MULTIPLE PUBLIC DEFINTIONS

思路很简单,利用预编译指令,让第一次包含是定义,之后的包含是声明。重复声明是合法的,当然就不会报错了。

3. 方法

在定义变量的h文件中:

//--通过宏定义,实现在h文件中定义且声明变量--#ifndefEXTERN#defineEXTERNextern#else#defineEXTERN#endifEXTERNunsignedcharg_var;

在main.c文件中:

#defineEXTERN//要放在包含h文件的语句前面

这样在编译main.c时,EXTERN 这个宏是空的,包含的h文件中的语句就是变量定义;
在编译其它c文件时,EXTERN 这个宏是关键字 extern,包含的h文件中的语句就是变量声明;

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 22:37:41

蒙眼下山:梯度下降的AI智慧

假设你站在一座山上,四周大雾,看不清山谷在哪里。 你的目标是:尽可能走到更低的位置。 虽然看不到整座山,但你可以感受脚下的坡度: 哪边上坡最陡?↓ 朝它的反方向走一小步↓ 重新判断坡度↓ 继续往下走这就…

作者头像 李华
网站建设 2026/10/15 12:39:25

工厂方法模式的应用:游戏中哪些地方适合用?

判断一个场景是否适合工厂方法,先问:业务流程基本相同,但其中创建的对象,需要由不同子类决定吗?如果答案是“是”,工厂方法就值得考虑。 注意:这里说的是通过子类重写创建方法的工厂方法模式&am…

作者头像 李华
网站建设 2026/10/15 13:55:09

PWM从原理到实战:占空比、频率、死区与STM32/HC32F460配置避坑指南

1. 从一次电机抖动排查说起:PWM到底在解决什么问题前阵子帮一个做小型云台的朋友排查问题,他反馈电机在低速转动时抖得厉害,换了驱动芯片、改了电源滤波都没用。我让他把示波器接到驱动板的输入脚上,波形一出来问题就很明显了——…

作者头像 李华
网站建设 2026/10/19 5:23:28

RAG进阶实战专栏策划:知识库形态、检索优化与本地部署全解析

RAG这个赛道,我盯着已经快两年了。从早先铺天盖地的“RAG入门教程”,到如今大家在认真讨论图片进不进得去知识库、本体建模怎么跟向量检索结合、本地部署到底能不能扛住真实业务,这中间的变化其实很能说明问题:RAG已经过了“讲概念…

作者头像 李华