小编R.k*_*ana的帖子

基于三元运算符 (?:) 的赋值避免了 C 中的类型检查

我无法理解为什么编译器在分配不兼容的指针时不发出警告(?:),但在直接分配时发出警告。

\n

在这种情况下编译器会发出警告:

\n
\n

test.c:在函数 \xe2\x80\x98main\xe2\x80\x99 中:test.c:8:4:警告:分配给\n\xe2\x80\x98uint32_t *\xe2\x80\x99 {aka \xe2 \x80\x98unsigned int *\xe2\x80\x99} 来自不兼容的指针类型\n\xe2\x80\x98uint32_t **\xe2\x80\x99 {aka \xe2\x80\x98unsigned int **\xe2\x80\x99 } [-Win兼容指针类型]\n8 | a = 数组;\n| ^

\n
\n
#include <stdint.h>\n#include <stdlib.h>\n\nint main(void)\n{\n    uint32_t *array[10], *a;\n    a = array;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

以下情况不会发出警告:

\n
#include <stdint.h>\n#include <stdlib.h>\n\nint main(void)\n{\n    int b = 8;\n    uint32_t *array[10], *a;\n\n    a = (b >= 8) ? array : malloc(8);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

环境:

\n
Gcc version 9.3.0\nUbuntu 20.04\ncompilation cmd: gcc test.c -o test.out\n
Run Code Online (Sandbox Code Playgroud)\n

c gcc conditional-operator void-pointers implicit-conversion

0
推荐指数
2
解决办法
237
查看次数