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'` が表示されますが、定義したのは 1 回だけです。ソース ファイル (.c) はそれを呼び出すだけです。私の問題は何ですか?ありがとう

4

2 に答える 2

1

ヘッダー ファイルを別のソース ファイルにもインクルードしている可能性があります。定義を .c ファイルに移動するか、 として宣言しgetInt()てみてくださいinline

于 2011-09-25T13:07:54.240 に答える
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;
}

main.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 に答える