2016-11-23 2340 views
0

我碰到这段代码。它没有给出错误,但究竟意味着什么?int A [] = {}是什么意思?

int A[]={}; 

编辑:我曾因为有些你要的背景下,编译器等编辑这个职位..

我不知道很多有关的编译器,但我设法找到的版本我是使用“gcc(tdm-1)4.9.2”。

我已经尝试过自己的代码,它确实运行正常,我也能够读取和写入数组。我的问题是:当我声明这样一个数组时,究竟发生了什么?

+1

一个空阵列... – Rahul

+4

这是否甚至编译? –

+2

这是一个语法错误。初始化列表不能为空。 – Olaf

回答

0

它定义了一个类型为int的空数组。

+5

这也不是标准C. – Olaf

4
int A[]={}; 

在C中是非法的。清空初始化程序无效。 见C11 draft, 6.7.9 Initialization

+1

有这么多的编译器在那里,写了这么多不同的标准(或者没有标准的所有)该陈述“在C中是非法的”没有实际意义。您至少必须指定标准的名称。建议编辑添加您在下一句中提到的标准名称。 –

+0

@ T.E.D。我相信,我添加的链接(C11草案)充分说明了它(任何潜在的不明确性)。 – usr

+3

@ T.E.D。如果问题被标记为[c],而不提平台或标准版本,则我们假设该问题是关于C标准的最新版本。 – user694733

0

您应该显示更多的上下文,并提及正在使用的编译器。

我不认为代码与符合标准的编译器编译,空初始化程序列表使其无效。

+2

这里的空括号'[]'不是问题。 – Olaf

+0

@Olaf对,为了清晰我编辑。谢谢。 – unwind

+3

Ehm,一个空的初始化者总是错的。把它称为标准中的缺陷(我认为这将是直接和有用的),但事实就是如此。 – Olaf

2

这意味着什么,这是无效的C.

C11 6.7.9规定,以下两种形式是有效的:

{ initializer-list } 
{ initializer-list , } 

initializer-list何处被定义为下列之一:

designationopt initializer 
initializer-list , designationopt initializer 

这可能是一个赋值表达式或C99指定的初始值设定项。空的初始化程序列表不是有效的语法。