【发布时间】:2022-01-19 19:52:57
【问题描述】:
我无法理解为什么编译器在通过 (?:) 分配不兼容的指针时不发出警告,但在直接分配时却发出警告。
编译器在这种情况下发出警告:
test.c:在函数“main”中:test.c:8:4:警告:分配给 'uint32_t *' {aka 'unsigned int *'} 来自不兼容的指针类型 'uint32_t **' {aka 'unsigned int **'} [-Wincompatible-pointer-types] 8 |一个=数组; | ^
#include <stdint.h>
#include <stdlib.h>
int main(void)
{
uint32_t *array[10], *a;
a = array;
}
以下情况无警告:
#include <stdint.h>
#include <stdlib.h>
int main(void)
{
int b = 8;
uint32_t *array[10], *a;
a = (b >= 8) ? array : malloc(8);
}
环境:
Gcc version 9.3.0
Ubuntu 20.04
compilation cmd: gcc test.c -o test.out
【问题讨论】:
-
提示:
malloc(8)的类型是什么?(b >= 8) ? array : malloc(8)是什么类型的?
标签: c gcc implicit-conversion conditional-operator void-pointers