gpt4 book ai didi

c - 如何使用库内的结构?

转载 作者:行者123 更新时间:2023-11-30 21:12:40 26 4
gpt4 key购买 nike

在 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 */

这将不起作用,因为错误:“此声明没有存储类或类型说明符”

我如何以所有(且只有)库函数都可以访问它的方式组织我的结构?

最佳答案

Windows 通过“不透明”结构来实现这一点。他们本质上所做的就是向用户隐藏实际的实现细节。如果某人设法对其中的实际类型(通过 .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}
};

关于c - 如何使用库内的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42333374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com