-
0 votesanswersviews
如何在联合C之外使结构类型定义可见
我在g下编译时遇到以下错误(这些是更长代码的段) 错误:无效使用不完整类型'const struct cmp_bk(const void *,const void *):: bk'错误:'const struct cmp_bk的前向声明(const void *,const void *):: bk' 守则如下: static union { struct tt { ... -
1 votesanswersviews
移植C - > C,无法访问未命名的union中的struct
我一直在努力将Marcel的简单国际象棋程序http://marcelk.net/mscp/从C移植到C.我从未对工会工作过多,更不用说工会中的结构了 . 我列出的最重要部分是工会的声明 . (所有代码都在一个.c文件中) . 除了C教科书之外,我还搜索并阅读了一些指南,但我仍然没有深入了解如何解决这个问题 . 我不确定什么是“前向说明”,也不知道我应该在什么情况下看待这个问题 . 我的编译选项... -
33 votesanswersviews
gcc,严格别名,并通过联合进行转换
你有任何恐怖故事要讲吗? GCC手册最近添加了一个关于-fstrict-aliasing的警告并通过联合转换指针: [...]获取地址,强制生成指针并取消引用结果具有未定义的行为[强调添加],即使转换使用了联合类型,例如: union a_union { int i; double d; }; int f() { double ... -
1 votesanswersviews
使用具有所有小数位的联合将char数组转换为double
我正在将一个项目从Java移植到C.我需要将一个字节(= C中的char)数组转换为double . 我在Stack Overflow上找到了一个使用联合的解决方案(How to convert a byte array into double in C?) . 我的代码到目前为止: #include <stdio.h> double getDouble(char array[], i... -
43 votesanswersviews
工会和打字
我一直在寻找,但找不到明确的答案 . 很多人说使用工会来打字 - 双关语是不明确和不好的做法 . 为什么是这样?考虑到你写入原始信息的内存并不仅仅是改变自己的一致性,我看不出为什么它会做任何未定义的任何原因(除非它超出了堆栈的范围,但这不是一个联合问题,那将是糟糕的设计) . 人们引用严格的别名规则,但在我看来,就像说你不能这样做,因为你做不到 . 如果不打双关语,联盟的意义何在?我在某个地方看到... -
23 votesanswersviews
union 'punning' structs w /“common initial sequence”:为什么C(99)而不是C规定'visible declaration of the union type'?
背景 通过 union 讨论关于类型惩罚的大多数未实现定义的性质,通常引用以下位,通过@ecatmur(https://stackoverflow.com/a/31557852/2757035),对具有"common initial sequence"成员类型的标准布局 struct 进行豁免: C11(6.5.2.3结构和联合成员;语义):[...]如果一个联合包含几个共享... -
55 votesanswersviews
是否通过C99中未指定的联合进行类型惩罚,并且它是否在C11中指定?
Stack Overflow问题Getting the IEEE Single-precision bits for a float的一些答案建议使用 union 结构进行类型惩罚(例如:将 float 的位转换为 uint32_t ): union { float f; uint32_t u; } un; un.f = your_float; uint32_t target = ... -
3 votesanswersviews
输入punning Vs Union成员访问权限
按此https://stackoverflow.com/a/1812932/1814023 writing one member of union and reading another member is undefined behavior. 并按此https://stackoverflow.com/a/11640603/1814023 type punning is allowed in... -
1 votesanswersviews
联盟:从联盟的一个数据成员读取到另一个联盟
我知道对于下面的代码,下面的“非法”是未定义的(虽然有些编译器允许),因为联合成员“a”是活动的,然后我们从联合成员“b”读取 . 问题是,“AmILegal”中的代码是否解决了这个问题,还是我做了一些可怕而且更加模糊的事情?我可以使用memcpy来实现相同的效果,还是我在那里调用另一个未定义的行为? 编辑:也许这个例子不够清楚 . 我想做的就是激活其他成员 . 所以我将float更改为int .... -
1 votesanswersviews
为什么拥有不同访问控制成员的工会不是标准布局?
§9.0 7.类S是标准布局类,如果它:(7.3)对所有非静态数据成员具有相同的访问控制(第11条),8标准布局结构是用以下定义的标准布局类 . class-key struct或class-key类 . 标准布局联合是使用类 - 键联合定义的标准布局类 . AFAICT,§9.0.7.3因§9.2.13而存在 13具有相同访问控制(第11条)的(非联合)类的非静态数据成员被分配,以便后面... -
6 votesanswersviews
union不能包含具有虚函数的对象
Code: struct A{ int a; virtual void f(){} }; union B{ A ob; }; Compile-time Error: C:\to\main.cpp|9|error: member 'A B::ob' with constructor not allowed in union| C:\to\main.cpp|9|error: ... -
6 votesanswersviews
含有挥发性结构的联盟
这看起来与POD structs containing constant member类似,但有些相反 . #include <iostream> struct A { int a; }; union U { volatile A a; long b; }; int main() { U u1; U u2; u1.a.a = 12... -
11 votesanswersviews
C 11中的联合:默认构造函数似乎被删除了
我试图理解如何通过C 11扩展联合 . 一个改变的是能够使用现在非平凡的特殊成员函数的非静态数据成员 . 来自cppreference.com 如果一个union包含一个非平凡的特殊成员函数的非静态数据成员(默认构造函数,复制/移动构造函数,复制/移动赋值或析构函数),那么该函数在联合中默认被删除,需要由程序员明确定义 . 最多一个数据成员可以拥有默认成员初始值设定项 . 我正在尝试以下代码:... -
4 votesanswersviews
union for uint32_t和uint8_t [4]未定义的行为? [重复]
这个问题在这里已有答案: Purpose of Unions in C and C++ 14个答案 在this answer的注释中,据说使用如下的联合将整数拆分为它们的字节将是未定义的行为 . 在那个地方给出的代码是相似的,虽然与此不相同,如果我更改了代码的未定义行为相关方面,请注意 . union addr { uint8_t addr8[4]; uint32_t addr32; };... -
3 votesanswersviews
F# - 在运行时创建递归识别联盟
我正在尝试编写一个简单的解释器来使用F#控制Turtle .我创建了以下递归联合类型来表示Turtle将接受的几个命令 . 代码将由"Command list"表示,使用简单的递归函数执行时不应该太难 . type Command = | Repeat of amount * Command list | Forward of amount | Turn of directi... -
26 votesanswersviews
如果我们只有一个成员,那么结构和联盟之间有什么区别吗?
我想知道一个成员数据类型的结构和联合之间的区别,如果有的话 . -
3 votesanswersviews
为联合分配内存以及联合指针和指针联合之间的区别
由于我的问题here无法自信地回答,我再次在这里问,希望有人确切知道: 指向union的指针和包含指向其元素的指针的union之间是否有任何区别(除了语法之外)? this示例中生成的程序集是相同的 . 只要我'm never accessing the other members, is it allowed to allocate memory for only one of the ... -
4 votesanswersviews
具有union静态和动态char数组的struct
我正在创建一个动态分配的链表,其中每个项都有一个数据元素 . 这些元素中的大多数是固定大小的char数组,但是一些可以具有不同的长度,例如 . 只有1或2个字符 - 或1000 . 如果我在数据元素中使用带有静态和动态字符数组的联合 - 它总是会占用: 静态大小或者malloc大小的malloced大小? 静态的大小如果malloc的malloced的大小? 指向malloced的指针... -
2 votesanswersviews
`volatile`是否允许与工会打字?
我们都知道像这样打字 union U {float a; int b;}; U u; std::memset(u, 0, sizeof u); u.a = 1.0f; std::cout << u.b; 是C中未定义的行为 . 它是未定义的,因为在 u.a = 1.0f; 赋值后 .a 变为活动字段且 .b 变为非活动字段,并且从非活动字段读取它是未定义的行为 . 我们都知道这一点... -
42 votesanswersviews
struct中的匿名联合不在c99中?
这里是我所遇到的非常简化的问题代码: enum node_type { t_int, t_double }; struct int_node { int value; }; struct double_node { double value; }; struct node { enum node_type type; union { s... -
0 votesanswersviews
从成员函数指针转换到另一个类型和返回,严格别名问题?
我写了一个类来存储函数指针或成员函数指针(不是一次两者) . 当我存储成员函数指针时,我也存储了一个对象指针(接收器) . 问题是:我事先不知道对象的类型和函数签名,所以我使用模板typename . 对于参数,我使用可变参数模板 . 我有一个类似于这样的代码: template <typename... Args> class A { public: template <... -
368 votesanswersviews
结构与联盟之间的区别
是否有任何好的例子来区分 struct 和 union ?基本上我知道 struct 使用其成员的所有内存而 union 使用最大的成员内存空间 . 是否有其他操作系统级别的差异? -
3 votesanswersviews
union是否支持灵活的阵列成员?
我在联合中声明了一个灵活的数组成员,如下所示: #include <stdio.h> union ut { int i; int a[]; // flexible array member }; int main(void) { union ut s; return 0; } 和编译器给出一个错误: source_file.c:8:9: erro... -
0 votesanswersviews
将union中的struct修改为union中的其他值而不复制
我有这个结构: typedef struct sPixelRGB { int r; int g; int b; } sPixel; typedef struct tsImagePPM { long imax; sPixel ** array; } sImagePPM; typedef struct tsImagePGM { long imax; ... -
5 votesanswersviews
解决Rust FFI中的联合结构
我有解决c-union结构XEvent的问题 . 我用rust-bindgen生成ffi绑定 . 所有代码都托管在github alxkolm/rust-xlib-record上 . 当我尝试从XEvent结构中提取数据时,麻烦发生在src/main.rs:106行 . let key_event: *mut xlib::XKeyEvent = event.xkey(); println!(&qu...