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

时间:2015-02-24 01:11:01

标签: c gcc linker

我想在.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;

}

2 个答案:

答案 0 :(得分:4)

答案很简单:在一个编译单元(.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
}

答案 1 :(得分:3)

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

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

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

注意:拥有全局变量的编程习惯很差。

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

static int myVariable = 0;

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

int getMyVariable( void )
{
    return myVariable;
}