小编0xL*_*eon的帖子

当访问联合中不同类型的不同成员进行写入和读取操作时,C 和 C++ 中的未定义行为是否存在差异?

让我们立即开始示例代码:

#include <stdio.h>
#include <stdbool.h>

typedef union {
    bool b;
    int i;
} boolIntUnion;

int main(void) {
    boolIntUnion val;

    val.i = 0;
    printf("i = %d; %s\n", val.i, ((val.b) ? "true" : "false"));
    
    val.i = 1;
    printf("i = %d; %s\n", val.i, ((val.b) ? "true" : "false"));
    
    val.i = 2;
    printf("i = %d; %s\n", val.i, ((val.b) ? "true" : "false"));
}
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,如果使用您在这里看到的联合是某种未定义的行为。我感兴趣的是第三种情况,我将其设置val.i2,但随后使用 union via 中的布尔值val.b作为打印字符串的条件。2在 MSVC 19 和 gcc 中,我得到了联合中的预期行为,导致了truefrom的值val.b,但是使用 …

c c++ clang

5
推荐指数
1
解决办法
171
查看次数

标签 统计

c ×1

c++ ×1

clang ×1