使结构在库和应用程序中可见 - C

问题描述 投票:0回答:4

我想知道如何使结构在库内和外部标头中都可见。让我尝试用下面的代码来解释一下

我有一个结构:

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

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

c struct .lib
4个回答
6
投票

您应该将结构和

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

此外,库中的函数也应该在库的头文件中原型化。


1
投票

标准中已使用一种简单的解决方案。

你可以尝试用#ifdef封装它。

类似

--- 头文件 ---

#ifndef LIBRARYHEADERFILE_INCLUDED
#define LIBRARYHEADERFILE_INCLUDED

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

int foo(strt_1 *a);
#endif

--- 结束头文件---

然后,在主程序和库上,#include 头文件。 就是这样。您的新类型和函数现在在每个地方都可见,不用担心重新定义错误。


1
投票

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.