如何在头文件中定义变量,C

How to define variables in a header file, C

我想在 .h 文件中声明和定义(使用默认值)变量。

当我这样做时,我得到

/tmp/cc19EVVe.o:(.data+0x0): multiple definition of `car_name'
/tmp/cc3twlar.o:(.data+0x0): first defined here
collect2: error: ld returned 1 exit status

我如何实现我的目标?即,在一个.h文件中用默认值声明和定义一个变量,并在多个.c文件中使用该变量?

这是 A.h 文件

char * car_name = "Volkswagen";
void execute();

这是第一个使用 A.h 中定义的变量 car_name 的文件:(该文件名为 execute.c)

#include "A.h"
#include <stdio.h>
#include <string.h>

void execute(){

    int len = sizeof(car_name) + 2;
    char car_name_with_new_line[len];
    strncat(car_name_with_new_line, car_name,  sizeof(car_name));
    strncat(car_name_with_new_line, "\n", 1);
    printf(car_name_with_new_line);

}

那是另一个 .c 文件:(它叫做 main.c)

#include "A.h"


int main(int argc, char ** argv){

    execute();
    return 0;

}

1) 在单个文件中定义变量,不要加static修饰符

2) 在头文件中为该变量放置一个 extern 语句。

那么只有一个变量实例存在,任何包含头文件的人都可以访问该变量。

注意:使用全局变量是糟糕的编程习惯。

良好的编程习惯是编写访问函数并将变量隐藏在文件中。类似于以下内容:

static int myVariable = 0;

void setMyVariable( int myVariableParm )
{   
    myVariable = myVariableParm;
}

int getMyVariable( void )
{
    return myVariable;
}

答案很简单:在一个编译单元(.c 文件)中定义 您的变量。 在与该 .c 文件关联的头文件中声明它们。

foo.h

extern char *g_name;        // Declare that g_name exists

foo.c

#include "foo.h"
char *g_name;               // Define g_name in one place

static char *m_private;     // Private to foo.c, not "exported" via foo.h

main.c

#include "foo.h"

void somefunc(void)
{
    // use g_name
}