0

假设我有一个非常小的头文件,如下所示:

#ifndef A_H_
#define A_H_

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

#endif /* A_H_ */

还有一个实现 print 的源文件,如下所示:

#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) 只调用它。我的问题是什么?谢谢

4

2 回答 2

1

你应该搬进getInt()ac,即

啊:

#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;
}

主.c:

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

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

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

于 2011-09-25T13:55:31.343 回答
1

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

于 2011-09-25T13:07:54.240 回答