【发布时间】:2020-09-03 04:32:33
【问题描述】:
我正在使用 GCC 和 IAR 来编译一些 C 代码。
#include <stdio.h>
#include <stdint.h>
#include <stddef.h>
uint8_t tab[] = NULL;
此示例代码使用 GCC 引发此错误:错误:无效初始化程序
使用 IAR 编译器可以接受语法
GCC 有什么问题,为什么 IAR 编译器会接受它?
【问题讨论】:
-
你的数组有多少个元素?
-
除了
NULL是一个指针值之外,语法不正确。uint8_t tab[] = { 0, 1, 2 };将生成一个包含三个元素的数组。 -
这个想法是有一个零元素的数组,我的意思是这只是通用代码的一部分,其中数组可以采用 0 到 n 元素,但在同样的情况下,数组的大小必须为 0 . 语法被 iar 和 armcc 编译器接受,我只有 gcc 的问题
-
我会说问题是倒退的,更有趣的是为什么其他编译器甚至允许这样做。
-
The idea is to have an array with zero element,这是不可能的。数组必须具有正大小。The syntax is accepted with iar and armcc compiler这是一个编译器扩展(或者只是未定义的行为),我猜这个数组有 1 个元素。