我正在尝试构建一些C代码,使得.c文件和私有.h文件定义了一个相当复杂的结构,但是面向公众的头文件只需要指向该结构类型的指针.我试过的是这个:
publicRadio.h
typedef struct _radio Radio;
void radioReceive(Radio *radio, ....);
Run Code Online (Sandbox Code Playgroud)
privateRadio.h
#include <publicRadio.h>
struct _radio {
...
...
}
Run Code Online (Sandbox Code Playgroud)
radio.c
#include <publicRadio.h>
#include <privateRadio.h>
void radioReceive(Radio *radio, ....)
{
...
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,我会得到类似的东西
radio.c:91:9: error: parameter 'radio' has just a forward declaration
radio.c:90:6: error: conflicting types for 'radioReceive'
publicRadio.h:29:6: note: previous declaration of 'radioReceive' was here
Run Code Online (Sandbox Code Playgroud)
我试图模仿我在其他具有公共面向API的库中看到的模式,这些API通过函数公开它们的结构,但是隐藏了血腥的细节.用来实现这一目的的食谱是什么?
好的:以下内容在 MSVC 和 GCC 上都可以正常工作,没有问题。
两个重要的错误是:
这是我使用的代码:
公共广播.h
typedef struct _radio Radio;
void radioReceive(Radio *radio, ....);
Run Code Online (Sandbox Code Playgroud)
私有Radio.h
#include "publicRadio.h"
struct _radio {
...
...
};
Run Code Online (Sandbox Code Playgroud)
无线电.c
#include "privateRadio.h"
void radioReceive(Radio *radio, ....)
{
...
}
Run Code Online (Sandbox Code Playgroud)
主程序
#include "publicRadio.h"
void main()
{
Radio* radio = ...;
radioReceive(radio, ....);
}
Run Code Online (Sandbox Code Playgroud)