变量重定义,嵌入式c

2024-03-20

我正在开发一个嵌入式 c 项目,并且遇到全局变量重新定义的问题。

我已将函数声明和定义分成几个 .h 和 .c 文件。其中许多函数需要访问全局变量,这些变量在 global_vars.h 中定义。因此,在头文件的开头,#ifndef、#define 部分中,“global_vars.h”。如果我不这样做,正如您可能想象的那样,我会收到一堆未定义的变量错误。

但是,即使 global_vars.h 具有 #ifndef _GLOBAL_VARS_H_ #define... #endif,我也会收到所有全局变量的重新定义错误。我的猜测是,当链接器尝试链接各个目标文件时,它会看到由于所有“blah_blah.h”文件中的#include“global_vars.h”而导致的重新定义。不过,据我了解,#ifndef... 可以解决这个问题。

有什么我忽略的吗?

提前致谢


链接器永远不会在 global_vars.h 文件中看到任何内容,除非——坏消息! -- 一些全局变量实际上是defined在该文件中。 global_vars.h 应该只包含声明对于这些全局变量,从来没有(好吧,几乎从来没有)它们的定义。

在 global_vars.h 中,您应该有如下声明:

extern int some_global;

您不可以:

int some_global;

如果您在 global_vars.h 中有定义,那么,是的,它们将在链接时被多重定义,因为 #includes global_vars.h 的每个 .c 文件都将拥有每个已定义变量的自己的定义。

的所有定义extern全局变量必须位于some.c 文件,当然。通常哪个 .c 文件并不重要。通常,所有全局变量定义都位于名为(惊讶!)global_vars.c 的文件中。

因此,请确保 global_vars.h 中没有任何全局变量定义,这样您就会处于良好状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

变量重定义,嵌入式c 的相关文章

  • Xamarin 测试记录器选项有错误。无法记录自动化测试

    选项 gt Xamarin gt Xamarin Test Recorder 中的所有设置都有错误 我的桌面上安装了 Visual Studio 2015 企业版 以及 Xamarin 和 Xamarin Test Recorder 插件
  • 为什么迭代器类型推导失败? [复制]

    这个问题在这里已经有答案了 为什么这在 C 中不起作用 为什么我不能限制foo的参数为std vector
  • 如何将 mat 转换为 array2d

    我为dlib http dlib net face landmark detection ex cpp html那里的面部地标代码使用 array2d 来获取图像 但我喜欢使用 Mat 读取图像并转换为 array2d 因为 dlib 仅支
  • C++ 中可以使用匿名类作为返回类型吗?

    有没有办法在 C 中使用匿名类作为返回类型 我用谷歌搜索这可能有效 struct Test fun 但是这段代码无法编译 错误信息是 新类型不能在返回类型中定义 其实代码没有任何意义 我只是想弄清楚匿名类是否可以用作C 中的返回类型 这是我
  • 仅针对某些异常类型中断

    我知道异常处理是一件非常重要的事情 我们在所有项目中都在这样做 主要原因是记录客户发生的错误 这工作正常 根本不是问题 但是 当我仍在使用 Visual Studio 编码和运行应用程序时 我根本不需要任何异常处理 我希望调试器正好停在应用
  • C 中的双重否定:是否保证返回 0/1?

    Is x 标准保证返回0 1 请注意 我是not询问 C 其中定义了 bool 类型 是的 在 C99 中 请参阅 6 5 3 3 4 逻辑非运算符的结果 是0如果其操作数的值比较 不等于0 1如果其操作数的值比较等于 0 结果具有类型in
  • 如何在 C# 中创建 PKCS12 .p12 文件?

    这可能是一个n00b问题 但我在这方面确实没有任何经验 我需要创建一个包含 X509 证书和私钥的 p12 捆绑包 我当前有两个对象 X509Certificate2 和包含关键信息的 RSAParameters 对象 如何将它们合并到 p
  • 如何在控制器中使用多个 DBContext

    如何在控制器中使用多个 DBContext 我尝试以不同的方式重载构造函数 一些控制器 public C1 DBContext1 a DBContext2 b DBContext3 c public C1 DBContext1 a publ
  • Moq - 是否可以在不使用 It.IsAny 的情况下设置模拟

    我一直使用 Moq 进行单元测试 有时我会嘲笑有很多参数的方法 想象一下这样的方法 public class WorkClient public void DoSomething string itemName int itemCount
  • 使用 (float&)int 进行类型双关可以正常工作,(float const&)int 会像 (float)int 一样转换吗?

    VS2019 发布 x86 template
  • 多个包含带有变量定义的头文件

    我只是构建一个简单的 C 项目 代码如下所示 head h ifndef HEAD H define HEAD H int my var 100 endif src1 cpp include head h src2 cpp include
  • 我应该使用 Helgrind 还是 DRD 进行线程错误检测?

    好像Valgrind http valgrind org docs manual manual html有两个工具都可以进行线程错误检测 Helgrind http valgrind org docs manual hg manual ht
  • C# 中的类和模块有什么用

    有人可以解释一下类和模块之间的区别吗 你什么时候使用其中一种而不是另一种 我正在使用 C 更新 我的意思是相当于 VB 模块的 C 版本 这在很大程度上取决于您所指的 模块 Visual Basic 的模块 C 中没有真正等效的 VB Ne
  • 为什么将未使用的返回值转换为 void?

    int fn void whatever void fn 是否有任何理由将未使用的返回值强制转换为 void 或者我认为这完全是浪费时间 David s answer https stackoverflow com questions 68
  • OpenSSL:无需 SSL_read() / SSL_write() 即可执行加密/解密

    我已经用 C 语言编写了一个基于事件的网络库 现在我想通过 OpenSSL 添加 SSL TLS 支持 而不是使用SSL read and SSL write 我宁愿让 OpenSSL 只执行传出 传入数据的加密 解密 让我自己传输 接收数
  • 为什么在 C++ 类中的数据成员上使用像 m_ 这样的前缀?

    许多 C 代码使用语法约定来标记数据成员 常见的例子包括 m memberName对于公共成员 在所有使用公共成员的情况下 memberName对于私人会员或所有会员 其他人尝试强制使用this gt member每当使用数据成员时 根据我
  • OpenCV 仅围绕大轮廓绘制矩形?

    第一次发帖 希望我以正确的方式放置代码 我正在尝试检测和计算视频中的车辆 因此 如果您查看下面的代码 我会在阈值处理和膨胀后找到图像的轮廓 然后我使用 drawContours 和矩形在检测到的轮廓周围绘制一个框 我试图在 drawCont
  • SQL Server CE 不兼容的数据库版本

    我有一个 SQL Server CE 4 0 数据库 sdf文件 当我尝试从我的应用程序 WPF 对数据库进行查询时 出现以下错误 数据库版本不兼容 如果这是兼容文件 请运行修复 其他情况请参考文档 数据库版本 4000000 请求的版本
  • 使用 List.Contains 方法为 LINQ 构建表达式树

    Problem 我正在重构一些LINQ查询我们的 Web 应用程序中的多个报告 并且我尝试将一些重复的查询谓词移至它们自己的中IQueryable扩展方法 以便我们可以将它们重新用于这些报告以及将来的报告 正如您可能推断的那样 我已经重构了
  • 从最大到最小的3个整数

    我是 C 初学者 我使用 编程 使用 C 的原理与实践 第二版 问题如下 编写一个程序 提示用户输入三个整数值 然后以逗号分隔的数字顺序输出这些值 如果两个值相同 则应将它们排列在一起 include

随机推荐

  • 将一张纸的某个范围复制到另一张纸中的某个特定单元格

    Workbooks 1 Worksheets 1 Copy after wb2 Sheets 1 上面的代码总是覆盖以前的内容 但这不是我想要的 如何将特定范围复制到特定单元格中的其他工作表 我必须复制的示例 sheet1 range A5
  • DrawingContext 装饰器 - 可以绘制堆栈面板吗?

    使用DrawingContext类我已经能够使用DrawRectangle 成功地将装饰器添加到我的 adornedElement 的方法 是否可以构建一个堆栈面板 其中包含文本框和图像 并将其指定为装饰器 顺便说一下 我使用的是 Visu
  • 在 Java 中计算多元正态 CDF

    有谁知道有一个可靠 准确的库来计算 Java 中的多元正态 MVN CDF 我正在寻找类似的东西MATLAB mvnpdf 函数 http www mathworks com help stats mvncdf html 我需要能够对最多
  • libavcodec/swscale 的输出损坏,具体取决于分辨率

    我正在编写一个视频会议软件 我有一个 H 264 流 使用 libavcoded 解码为 IYUV 然后在无窗口模式下使用 VMR9 渲染到窗口中 我使用 DirectShow 图形来执行此操作 为了避免不必要的 RGB 和反转换 请参阅l
  • 使每个选项卡具有相同的宽度并且可扩展

    我正在尝试实现类似浏览器中的选项卡之类的功能 所有选项卡必须具有相同的宽度并且可以扩展 因此当选项卡很多时 它们需要调整大小并适合窗口 就像 Chrome 或 Firefox 所做的那样 问题 如果某个选项卡的文本多于其他选项卡 则该选项卡
  • HKSampleQuery 只会返回过去 7 天的值?

    这是一个 WatchOS 应用程序 通过测试 此代码似乎只会返回我手动添加到健康应用程序中的不到 1 周的体重值 这是故意的吗 周围的路 func getUserBodyMass completion escaping HKQuantity
  • 如何使用 Ember.RSVP.onerror 在没有错误处理程序的情况下报告被拒绝的 Promise 的异常

    我刚刚看了这个video http www youtube com watch v L9OOMygo1HI最近与 ember core 框架开发人员进行的小组讨论 在视频中 每个小组成员都被要求分享一个通用的调试技巧 Tom Dale 调用
  • 钩子中的 React 类组件的 this.props.history.push('/some_route') 相当于什么?

    我正在努力实现这个目标 import isAuthorized from somewhere async componentDidMount const authorized await isAuthorized if authorized
  • 正则表达式模式与 ruby​​ on Rails 的形式

    使用 form for 时是否支持模式属性 我正在尝试组合正则表达式模式以确保电话号码的格式正确 我的问题是模式属性不会仅采用正则表达式字符串 doesnt work 因此 当我将正则表达式写为字符串时 它会导致问题 例如必须转
  • 通过 Bash 传递命令行参数

    在温习 bash 时 已经有一段时间了 我惊讶地发现执行这段代码 另存为 script sh echo Arg 0 to script sh 0 echo Arg 1 to script sh 1 function echo args ec
  • 远程注册

    我知道关于远程注册表访问已经讨论过几次 但我找不到任何关于如何实现这一点的好例子 我确实找到了http www codeproject com KB cs cpimpersonation1 aspx http www codeproject
  • 如何拦截Hibernate生成的SQL?

    对于一个像老大哥一样工作的安全系统 比如受监视的强制访问控制 我们必须拦截并处理 hibernate 生成的所有 select 语句 我们将用户 时间戳和 sql 选择存储在数据库中 以便使用其他工具进行一些分析 这些信息可以确定用户试图查
  • SignalR WebRTC WebSocket 已处于 CLOSING 或 CLOSED 状态

    我想测试运行 SignalR 和 WebRTC 的最简单实现 我将代码托管在https github com foyzulkarim WebRtc https github com foyzulkarim WebRtc 我制作了两个不同的文
  • 在 AngularJS 中集成 jQuery 插件的正确方法

    我想知道将 jQuery 插件集成到我的 Angular 应用程序中的正确方法是什么 我找到了几个教程和截屏视频 但它们似乎适合特定的插件 例如 http amitgharat wordpress com 2013 02 03 an app
  • 优化 iPhone / iPod touch 上的二进制应用程序大小

    我知道用户只能通过 3G 下载最多 20MB 而我的构建 发布 iphoneos 显示我的应用程序为 26MB 我正在链接到 Three20 iPhone 框架 这是提交到 App Store 时计入 20MB 最大值的最终大小吗 我能做些
  • Angular 2 中的条件验证

    Angular 2 中的验证非常简单 这非常棒 然而 如果选择了其他字段 如何将必填字段设置为可选字段 这是我的规则 this contractsFilter this fb group selectedContractType Valid
  • 如何从url中提取域名?

    如何使用 bash 从 url 中提取域名 喜欢 http example com http example com 到 example com 必须适用于任何 TLD 而不仅仅是 com 您可以使用简单的AWK方式提取域名 如下所示 ec
  • 如何将整数放入数字数组[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想将像 123456 这样的数字放入数字数组中 您能给我一个关于该过程的提示吗 我可以定义一个元素数量未知的数组吗 首先计算数字的个数
  • UWP 应用程序 WebView 泄漏内存,无法清除图像

    Problem WebView 加载图像后不释放内存 如果所有 WebView 实例都被销毁几秒钟 内存似乎会被释放 我们从 XAML 树中删除并清除了代码中的所有引用 我们在调试器中检查了当时所有实例都已释放 这个解决方案是有问题的 因为
  • 变量重定义,嵌入式c

    我正在开发一个嵌入式 c 项目 并且遇到全局变量重新定义的问题 我已将函数声明和定义分成几个 h 和 c 文件 其中许多函数需要访问全局变量 这些变量在 global vars h 中定义 因此 在头文件的开头 ifndef define