0

ライブラリ内と外部ヘッダーの両方で構造を表示する方法を知りたかったのです。次のコードで説明してみましょう

私は構造体を持っています:

typedef struct{
int a;
int b;
}strt_1;

アプリケーションで同じインスタンスを作成し、それをライブラリ関数に渡し、後で内部の a & b 変数を更新したいので、

応用

int main()
{
    strt_1 a;
    foo(&a);
}

ライブラリ内:

   int foo(strt_1 *a)
   {
      a->b = 0;
      a->a = 1;
   }

問題:ライブラリで構造体の定義を作成すると、アプリケーションで同じものを再入力すると、(明らかに)再定義として表示されます。しかし、アプリケーションに入力すると、定義が見つからないというメッセージが表示されてコンパイルできません。構造体の内容を外部のサードパーティ ライブラリ ユーザーに表示し、ライブラリ コンパイラにも表示するにはどうすればよいですか?

4

4 に答える 4

6

typedefライブラリに付属のヘッダー ファイルに構造体と を配置する必要があります。ライブラリとライブラリを使用するアプリケーションの両方がこのヘッダー ファイルを使用します。ヘッダー ファイルで定義された構造体と typedef は、複数の定義エラーを引き起こしませ。両方でグローバル変数または関数を定義するだけで、複数の定義エラーが発生します。

また、ライブラリ内の関数は、ライブラリのヘッダー ファイルでもプロトタイプ化する必要があります。

于 2013-05-30T12:41:08.060 に答える
1

構造体を使用する前に、ヘッダー ファイルで構造体を定義し、そのヘッダーを C ファイルに含めます。

于 2013-05-30T12:42:18.657 に答える
1

標準インクルードでは、1 つの簡単なソリューションが既に使用されています。

#ifdef でカプセル化を試みることができます。

何かのようなもの

--- ヘッダファイル ---

#ifndef LIBRARYHEADERFILE_INCLUDED
#define LIBRARYHEADERFILE_INCLUDED

typedef struct{
int a;
int b;
}strt_1;

int foo(strt_1 *a);
#endif

--- ヘッダファイル終了 ---

次に、メイン プログラムとライブラリで、ヘッダー ファイルを #include します。以上です。新しい型と関数の両方が、再定義エラーを心配することなく、あらゆる場所で表示されるようになりました。

于 2013-05-30T12:40:38.370 に答える
1

ヘッダーファイルtypedefに入れます。MyLibrary.h次に#include "MyLibrary"、ライブラリ ソース ファイルと、ライブラリのバイナリ バージョンを使用する外部コードの両方で。

于 2013-05-30T12:40:44.963 に答える