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

问题:如果我在库中创建结构的定义,当我在应用程序中重新键入相同的内容时,它显示为重新定义(显然)。但是如果我在应用程序中键入它,我将无法编译它,因为它说缺少定义,所以,我如何向外部 3rd 方库用户显示 Struct 的内容,并使其对库编译器可见?

4

4 回答 4

6

您应该将结构和 放在typedef库附带的头文件中。库和使用该库的应用程序都使用此头文件。头文件中定义的结构和 typedef不会导致多个定义错误,只有在两者中定义全局变量函数才会这样做。

此外,库中的函数也应该在库的头文件中进行原型设计。

于 2013-05-30T12:41:08.060 回答
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

放入头文件中typedefMyLibrary.h然后#include "MyLibrary"在您的库源文件和使用库的二进制版本的外部代码中。

于 2013-05-30T12:40:44.963 回答
1

在头文件中定义结构,并在使用结构之前将该头包含在 c 文件中。

于 2013-05-30T12:42:18.657 回答