Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么没有类型转换警告?_C_Gcc_Embedded_Clang - Fatal编程技术网

C 为什么没有类型转换警告?

C 为什么没有类型转换警告?,c,gcc,embedded,clang,C,Gcc,Embedded,Clang,我有以下C代码片段,其中在Clang中启用了-Wconversion: uint8_t num_ch = get_num_channels(); uint64_t test_mask = 1 << num_ch; uint8_t num_ch=get_num_channels(); uint64测试屏蔽=1 为什么没有类型转换警告 简短回答:因为您正在使用的clang/LLVM版本中存在缺陷(有些人甚至可能称之为bug) 讨论/解释/推理 该问题源于位移位表达式的计算,s是num\

我有以下C代码片段,其中在Clang中启用了-Wconversion:

uint8_t num_ch = get_num_channels();
uint64_t test_mask = 1 << num_ch;
uint8_t num_ch=get_num_channels();
uint64测试屏蔽=1
为什么没有类型转换警告

简短回答:因为您正在使用的clang/LLVM版本中存在缺陷(有些人甚至可能称之为bug)

讨论/解释/推理


该问题源于位移位表达式的计算,
s是
num\u ch
常量吗?无论如何,这里可能存在的问题不是类型转换,而是移位有符号的
int
。另一个问题是,甚至1U比这更糟糕-当您实际移位负值时,它甚至不会抱怨:有趣!MSVC给出:警告C4365:“正在初始化”:从“int”转换为“uint64\u t”,有符号/无符号不匹配。(我已经声明:
uint64\u t num\u ch=3;
)。它还给出了警告:C4334:“GCC 4.85.用<代码> -WIFTION/CODE >警告。这肯定是一个bug,但是当您考虑到GCC在升级后的10版本中删除了警告,而9.3版本仍然发出警告时,出现了更多的疑虑。