在我的代码中,我有一些使用全局变量的void函数。
int i =0;
void increment()
{
i++;
}
int main()
{
increment();
printf("i = %i\n",i)
}
我想将函数分成不同的文件,所以我移动int i;进入头文件,并在那里声明void函数。 e.g
(in my header file)
int i = 0;
void increment();
(in main file)
#include "header.h"
int main()
{
increment();
printf("i = %i\n",i);
}
编译时,我得到一个未定义的增量引用。我需要做些什么来解决这个问题?
答案 0 :(得分:2)
在你的头文件myheader.h中,
extern int i;
extern void increment();
在increment.c中,
#include "myheader.h"
void
increment()
{
i++;
}
在main.c中,
#include <stdio.h>
#include "myheader.h"
int i = 0;
int main()
{
increment();
printf("i = %i\n",i);
}
答案 1 :(得分:2)
继续发表评论,除非绝对需要,否则您希望避免使用全局变量。您可以轻松地将函数分离为单独的文件,并将将指针传递给整数i
作为increment
的参数。它只需要额外的努力,并避免一些陷阱,例如
<强> increment.h 强>
void increment (int *i);
<强> increment.c 强>
void increment (int *i)
{
(*i)++;
}
<强>的main.c 强>
#include <stdio.h>
#include "increment.h"
int main (void) {
int i = 0, j;
for (j = 0; j < 5; j++) { /* simple loop to call increment 5-times */
increment (&i);
printf ("call %d, i : %d\n", j, i);
}
return 0;
}
示例编译
$ gcc -Wall -Wextra -pedantic -std=gnu11 -Ofast increment.c -o bin/main main.c
示例使用/输出
$ ./bin/main
call 0, i : 1
call 1, i : 2
call 2, i : 3
call 3, i : 4
call 4, i : 5
仔细看看,如果您有其他问题,请告诉我。
答案 2 :(得分:0)
这对我有用:
header.h
int i = 0;
void increment()
{
i++;
}
的main.cpp
#include "header.h"
int main(){
increment();
printf("i = %i\n",i);
return 0;
}
答案 3 :(得分:0)
未定义的引用错误是由于在头文件中声明了增量,但未在任何c文件中定义 我建议您使用以下代码:
(在我的标题文件中)
EXTERN int i;
void increment();
(在主档案中)
#define EXTERN
#include "header.h"
int main()
{
increment();
printf("i = %i\n",i);
}
(在新的c文件中)
#define EXTERN extern
#include "header.h"
void increment()
{
i++;
}