变量重定义,嵌入式c

Tre*_*rey 2 c embedded header redefinition

我正在研究嵌入式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 ...处理这个问题.

我有什么东西可以俯瞰吗?

提前致谢

Pet*_*son 7

除非 - 坏消息,链接器永远不会在global_vars.h文件中看到任何内容!- 实际上在该文件中定义了一些全局变量.global_vars.h应该只包含那些全局变量的声明,从不(很好,几乎从不)它们的定义.

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

extern int some_global;
Run Code Online (Sandbox Code Playgroud)

你不被允许:

int some_global;
Run Code Online (Sandbox Code Playgroud)

如果您在global_vars.h有定义的话,是的,他们将乘在链接时定义,因为每个来#include global_vars.h的.c文件都将有自己的定义各变量的定义.

所有extern全局变量的定义必须在某个 .c文件中,当然.通常哪个.c文件无关紧要.通常,所有全局变量定义都在名为(surprise!)global_vars.c的文件中.

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