相关疑难解决方法(0)

将布尔设置为0安全吗?

假设我有一些遗留代码,除非发现错误,否则无法更改,并且它包含以下代码:

bool data[32];
memset(data, 0, sizeof(data));
Run Code Online (Sandbox Code Playgroud)

这是bool将数组中的所有false值设置为值的安全方法吗?

更一般地,是安全的memsetbool0,以使其价值false

是否保证可以在所有编译器上运行?或者我是否要求修复?

c++ memset language-lawyer

32
推荐指数
4
解决办法
4275
查看次数

当访问联合中不同类型的不同成员进行写入和读取操作时,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++ ×2

c ×1

clang ×1

language-lawyer ×1

memset ×1