在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 */
由于错误,这不会起作用:"此声明没有存储类或类型说明符"
我如何以所有(也是唯一的)库函数可以访问它的方式组织我的结构?
答案 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}
};