“多重定义”的问题

时间:2011-09-25 13:01:50

标签: c header multiple-definition-error

假设我有一个非常小的头文件:

#ifndef A_H_
#define A_H_

void print();
int getInt()
{ //ERROR HERE
    return 5;
}

#endif /* A_H_ */

实现打印的源文件如下:

#include "a.h"

void print()
{
    printf("%d\n",getInt()); //WARNING HERE
}

我的main()函数代码:

#include <stdio.h>
#include <stdlib.h>
#include "a.h"

int main(void)
{
    print();
    return EXIT_SUCCESS;
}

请注意,getInt在头文件中定义并在源文件中调用。 当我编译时,我在头文件中得到multiple definition of getInt'`,但我只是 定义一次!源文件(.c)仅调用它。我的问题是什么? 感谢

2 个答案:

答案 0 :(得分:1)

您可能也将头文件包含在另一个源文件中。您可以尝试将定义移至.c文件或将getInt()声明为inline

答案 1 :(得分:1)

你应该将getInt()移到a.c,即

A.H:

#ifndef A_H_
#define A_H_

void print(void);
int getInt(void);

#endif /* A_H_ */

交流转换器:

#include <stdio.h>
#include "a.h"

void print(void)
{
    printf("%d\n",getInt());
}

int getInt(void)
{
    return 5;
}

main.c中:

#include <stdio.h>
#include <stdlib.h>
#include "a.h"

int main(void)
{
    print();
    return EXIT_SUCCESS;
}

根据经验,接口(即 prototypes 用于外部可访问的函数,加上相关的typedef和常量等)属于.h文件,而实现(即实际的函数定义,以及私有(静态)函数和其他内部函数)属于.c文件。