如何在头文件中定义变量,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
}
我想在 .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
}