我在我的程序的整个c文件中共享全局变量和3个结构时遇到了很大的问题。我知道使用全局变量可能不是最好的方法,但这似乎适合我现在。< / p>
出现的两个常见错误是:
variable_name的未定义引用
在变量名之前错误预期'=',',','%3b','asm'或'属性'
我想做的是:
在variables.h和variables.c中定义我的全局变量
定义函数是file1.h,file2.h等。
喜欢:
file1.h:
#ifndef FILE1_H
#define FILE1_H
void function_file1(void);
#endif
file1.c:
#include "file1.h"
void function_file1(void) {
//do sth
}
我在variables.h中将全局变量和结构定义为extern,然后在variables.c中没有extern关键字。
然而,经过一遍又一遍这样做后,我继续得到上述两个错误。我有什么我想念的吗?
以下是有关我所做的事情的更多信息:
variables.h:
#ifndef VARIABLES_H
#define VARIABLES_H
extern int x;
extern int y;
extern int foo = 3; // i have set value to 3 variables with extern like the foo one
/*Tooltips */
struct test_struct {
/* variables
*/
} test;
extern struct test_struct test;
#endif
functions.h:
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
#include "variables.h"
void do_sth(void) {
//do sth
}
#endif
的main.c
/* including libraries before including variables.h and functions.h */
#include "variables.h"
#include "functions.h"
........
这是程序的基本结构。有一个包含全局变量的variable.h文件。大约有7个functions.h,比如包含程序的几个函数的文件。这种结构编译器可以没有显示任何错误。
问题是:如何为程序中的每个.h文件创建一个.c文件? 像variables.h和variables.c以及functions.h和functions.c?
答案 0 :(得分:0)
首先要重新考虑将变量和函数本身分开是否真的有意义。
一般来说,某些变量和某些函数之间存在关系。掌握这种关系可能会更有意义。
将变量和函数组合在一起。
无论如何回到你的问题,定义和声明变量的可能方法如下:
variables.h:
#ifndef VARIABLES_H
#define VARIABLES_H
extern int x;
extern int y;
extern int foo;
struct test_struct {
/* variables
*/
};
extern struct test_struct test;
#endif
variables.c:
#include "variables.h"
int x;
int y;
int foo = 3; // i have set value to 3 variables with extern like the foo one
struct test_struct test;
...
将variables.h
包含在使用外部的任何模块中,然后让链接器添加variables.o
从variables.c
编译。