我无法理解为什么编译器在分配不兼容的指针时不发出警告(?:),但在直接分配时发出警告。
在这种情况下编译器会发出警告:
\n\n\ntest.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
#include <stdint.h>\n#include <stdlib.h>\n\nint main(void)\n{\n uint32_t *array[10], *a;\n a = array;\n}\nRun 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}\nRun Code Online (Sandbox Code Playgroud)\n环境:
\nGcc version 9.3.0\nUbuntu 20.04\ncompilation cmd: gcc test.c -o test.out\nRun Code Online (Sandbox Code Playgroud)\n c gcc conditional-operator void-pointers implicit-conversion