gpt4 book ai didi

c - 变量重定义,嵌入式c

转载 作者:行者123 更新时间:2023-12-02 12:42:23 26 4
gpt4 key购买 nike

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

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

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

有什么我忽略的事情吗?

提前致谢

最佳答案

链接器永远不会在 global_vars.h 文件中看到任何内容,除非——坏消息! -- 一些全局变量实际上是在该文件中定义的。 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 中没有任何全局变量定义,这样您就会处于良好状态。

关于c - 变量重定义,嵌入式c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6378817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com