如何使用库中的结构?

时间:2017-02-19 21:55:04

标签: c

在mylib.h中:

typedef struct {
    int len;
    unsigned char *payload;    /* payload len != len */
} packet;

packet SEND_NUMBER;
packet SEND_CHARACTER;
/* and more */

在mylib.c中:

SEND_NUMBER = {
    5,
    {0x01,0x02}
}

int a_function_which_handles_packet{
}
/* and some other functions */

由于错误,这不会起作用:"此声明没有存储类或类型说明符"

我如何以所有(也是唯一的)库函数可以访问它的方式组织我的结构?

1 个答案:

答案 0 :(得分:-1)

Windows使用" opaque"结构。他们实际上在做的是隐藏用户的实际实现细节。如果他们设法对(通过.pdb文件)中的实际类型进行反向工程,那么您无法真正阻止某人对实际结构进行类型转换并访问其字段。您可以在自己的库代码中将结构定义为

typedef struct {
    int len;
    unsigned char *payload;    /* payload len != len */
} packet;

将头文件公开给开发人员

typedef struct {
    uint8_t reserved[sizeof(int)+sizeof(char*)]
} packet;

虽然注意填充物。您将确保结构大小相同。检查编译器文档以查看默认填充,或者将其设置为1个字节以防止出现意外。

顺便说一句,在C11中,你可以使用复合文字做你想做的事。

SEND_NUMBER = (packet){
    5,
    (unsigned char []){0x01,0x02}
};