让我们立即开始示例代码:
#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.i为2,但随后使用 union via 中的布尔值val.b作为打印字符串的条件。2在 MSVC 19 和 gcc 中,我得到了联合中的预期行为,导致了truefrom的值val.b,但是使用 …