在C中将函数分离到不同的文件中

时间:2017-04-29 03:57:04

标签: c function

在我的代码中,我有一些使用全局变量的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);
}

编译时,我得到一个未定义的增量引用。我需要做些什么来解决这个问题?

4 个答案:

答案 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++;
}
相关问题