Tag: struct

C在头文件中转发struct

我试图在函数中传递struct指针。 我在file1.h中有一个typedef ,并希望只将该头包含到file2.c中,因为file2.h只需要指针。 在C ++中,我会像在这里一样写,但是使用C99它不起作用。 如果有人有任何建议如何传递struct指针没有完全定义,将非常感激。 编译器 – gcc。 file1.h typedef struct { … } NEW_STRUCT; file2.h struct NEW_STRUCT; void foo(NEW_STRUCT *new_struct); //error: unknown type name ‘NEW_STRUCT’ file2.c中 #include “file2.h” #include “file1.h” void foo(NEW_STRUCT *new_struct) { … }

如何删除gcc 4.6中的警告:缺少初始化程序?

代码: GValue value = { 0 }; 发出以下警告: 缺少初始值设定项[-Wmissing-field-initializers] 我知道这是一个gcc’s BUG ; 但有一些技巧可以删除它吗? 真的不太好看到这种不真实的警告。 但是我不希望断电警告,因为它也会隐藏我的真实警告。 很抱歉,但我无法将我的gcc更新为4.7(看起来它已修复)版本。

使用其他Const Struct实例初始化Const Struct

我很好奇为什么下面的代码片段无法编译: typedef struct Foo { int a; int b; } Foo; static const Foo FooZero = { 0, 0 }; typedef struct Bar { Foo foo; int c; } Bar; static const Bar BarZero = { FooZero, 0 }; 它抱怨使用FooZero ,声称FooZero不是Compile-Time Constant FooZero量 但不是吗? 我在这里不理解什么? 显然,我可以简单地用{ 0, 0 }替换初始化程序中FooZero的使用 – 我的目的是问问题不是如何解决问题 – 我试图理解FooZero不是的根本原因,事实上,编译时常量。 谢谢

使用带有C结构的C ++模板进行内省?

我正在用C ++做一些其他用C语言编写的公司(使用C不是我的选项:()。它们有许多非常相似的数据结构(即它们都有字段)比如“名字”,“地址”等等。但是,无论出于何种原因,他们都没有一个共同的结构,以此为基础做任何其他事情(做任何事情)。无论如何,我需要做一个全系统的分析内存中的这些结构,并将它们全部放入表中。不是太糟糕,但表必须包含所有变量的所有字段的条目,即使它们没有字段(结构b可能)有字段“latency”,但struct a没有 – 在表中,a的每个实例的条目必须有一个“latency”的空条目。 所以,我的问题是,有没有办法在运行时确定传递给模板函数的结构是否具有特定字段? 或者我是否必须为我编写一些黑魔法宏? (问题基本上是我不能使用模板专业化) 谢谢! 如果您有任何疑问,请随时提出! 这是我在想什么的嗤之以鼻…… struct A { char name[256]; int index; float percision; }; struct B { int index; char name[256]; int latency; }; /* More annoying similar structs… note that all of the above are defined in files that were compiled as C – not C++ */ […]

灵活arrays成员的真正好处是什么?

在阅读了一些与柔性arrays成员相关的post后,我仍然不完全理解为什么我们需要这样的function。 可能重复: C中的灵活arrays成员 – 糟糕吗? 这是C中的Flexible Array Struct成员吗? (如果我没有从上面可能的重复问题中解决我的问题,请怪我) 以下两个实现之间的真正区别是什么: struct h1 { size_t len; unsigned char *data; }; struct h2 { size_t len; unsigned char data[]; }; 我知道h2的大小就好像省略了灵活的数组成员(数据),即sizeof(h2) == sizeof(size_t) 。 而且我也知道灵活的数组成员只能作为结构的最后一个元素出现,因此原始实现在data位置可以更灵活。 我真正的问题是为什么C99添加此function? 仅仅因为sizeof(h2)不包含实际大小的数据? 我相信我必须错过这个function的一些更重要的观点。 请指出给我。

重新定义; 不同的基本类型(typedef struct)

当我们在不同的文件中定义结构时,我在尝试使结构正常工作时遇到了一些麻烦。 据我所知,错误告诉我结构被定义了两个不同的时间。 我相信也许我可能需要在某处使用extern? 我尝试过试验并在Google上寻求帮助,但无济于事。 任何帮助都将非常感谢,谢谢。 我的所有四个文件都在下面。 文件:Foo.h typedef struct { int number; } my_struct; // Redefinition; different basic types 文件:Foo.c #include “Foo.h” #include “Bar.h” #include my_struct test; int main(void) { test.number = 0; DoSomething(&test); printf(“Number is: “, &test.number); } 文件:Bar.h #include “Foo.h” void DoSomething(my_struct *number); 文件:Bar.c #include “Bar.h” void DoSomething(my_struct *number) { number->number = 10; […]

结构中的数组和结构的Malloc

如何将malloc放在另一个struct中的struct? 我还想在结构中malloc一个项目数组,然后在需要时重新分配这个数组,这是如何正确完成的? 你能举个例子来说明一个结构,然后是上面的结构。 我有点不确定事情的顺序。 是否可以释放结构中的数组,然后是结构本身,在创建结构时是否必须对结构进行malloced,然后对其字段进行malloced /声明等等?

为什么struct hostent中的h_addr_list是char **而不是struct in_addr **?

我是网络编程的新手。 以下结构定义让我很困惑。 这里h_addr_list是一个定义为字符串数组,但它用于存储in_addr结构的数组。 为什么它没有定义为struct in_addr **h_addr_list而不是char **h_addr_list ? struct hostent { char *h_name; /* Official domain name of host */ char **h_aliases; /* Null-terminated array of domain names */ int h_addrtype; /* Host address type (AF_INET) */ int h_length; /* Length of an address, in bytes */ char **h_addr_list; /* Null-terminated array of in_addr structs […]

将原始结构内容(字节)写入C中的文件。对写入的实际大小感到困惑

基本问题,但我希望这个结构占用13个字节的空间(1个用于char,12个用于3个无符号的int)。 相反, sizeof(ESPR_REL_HEADER)给了我16个字节。 typedef struct { unsigned char version; unsigned int root_node_num; unsigned int node_size; unsigned int node_count; } ESPR_REL_HEADER; 我想要做的是用一些值初始化这个结构并将它包含的数据(原始字节)写入文件的开头,这样当我打开这个文件后我才能重构这个结构并获得一些元数据有关文件其余部分包含内容的数据。 我正在初始化结构并将其写入文件,如下所示: int esprime_write_btree_header(FILE * fp, unsigned int node_size) { ESPR_REL_HEADER header = { .version = 1, .root_node_num = 0, .node_size = node_size, .node_count = 1 }; return fwrite(&header, sizeof(ESPR_REL_HEADER), 1, fp); } 我试验时node_size当前是4。 在向其编写结构后,该文件包含以下数据: […]

灵活数组成员不在结构错误结束时的原因是什么?

我想知道为什么我不断收到error: flexible array member not at end of struct当我调用malloc时error: flexible array member not at end of struct错误的error: flexible array member not at end of struct 。 我有一个带有可变长度数组的结构,我一直收到这个错误。 结构是, typedef struct { size_t N; double data[]; int label[]; } s_col; 而对malloc的调用是, col = malloc(sizeof(s_col) + lc * (sizeof(double) + sizeof(int))); 这是对malloc的正确调用吗?