开发者

problem with "multiple definition"

开发者 https://www.devze.com 2023-04-07 16:01 出处:网络
Say I have a very little header file like so: #ifndef A_H_ #define A_H_ void print(); int getInt() { //ERROR HERE

Say I have a very little header file like so:

#ifndef A_H_
#define A_H_

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

#endif /* A_H_ */

And a source file implementing print like so:

#include "a.h"

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

And my main() function code:

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

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

Notice that getInt is defined in the header file and i开发者_JS百科nvoked in the source file. When I compile I get multiple definition ofgetInt'` in the header file, but I've only defined it once! The source file (.c) only invokes it. What is my problem? Thanks


You're probably including your header file into another source file too. You may try to move the definition to the .c file or declare getInt() as inline.


You should move getInt() into a.c, i.e.

a.h:

#ifndef A_H_
#define A_H_

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

#endif /* A_H_ */

a.c:

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

As a rule of thumb, interfaces (i.e. prototypes for externally accessible function, plus related typedefs and constants etc) belong in .h files, while omplementations (i.e. actual function definitions, plus private (static) functions and other internal stuff) belong in .c files.

0

精彩评论

暂无评论...
验证码 换一张
取 消