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