2013-08-05 82 views
8

this文章末尾有声明extern int (x)[]。圆括号是否在做任何事情或者他们只是为了混淆?C中`extern int(x)[]`和`extern int x []`有什么区别?

我的猜测是圆括号x是一个外部整数数组(这就是文章所说的),但没有那些x将是一个整数的外部数组。如果这是真的,那么定义将如何不同?他们都不是int x[]

+1

“他们只是为了混淆” – P0W

+0

是不是一个外部数组'int's外部'int'数组相同? – alk

+1

如果您正在研究如何阅读C声明,我觉得有必要提及[顺时针/螺旋规则](http://c-faq.com/decl/spiral.anderson.html)。 – ravron

回答

6

不,那些人在那里什么也没做。您链接到的文章解释了原因:

区分两者的最简单方法是查看类型说明符的位置 。如果类型说明符紧跟在左括号之后,则该括号是函数 描述符的开始,并且该类型是函数参数的一部分。括号中的空 也表示一个函数。否则括号是 分组(可能是不必要的,但最好太多太少)表达式。

另请注意,“外部整数数组”和“外部整数数组”是完全相同的东西 - “外部性”总是进入正在声明的对象,在本例中是一个数组。就我个人而言,我认为描述它的第一种方式在技术上是不准确的,而且很容易混淆。

+0

我刚刚从页面引用这个EXACT块。这是一个很好的方式来说明圆括号的含义。 :) –

+0

谢谢,我读了自己的块,但无法弄清楚这是不必要的情况下:) –

+1

@Juris:我编辑了答案,澄清了什么是外在的。 – Jon

1

在这种情况下,paranthesis没有意义。通常,您可以使用pamentalhesis作为函数指针或标记更强的绑定,因为所有运算符都有不同的绑定级别。
extern关键字标记,这只是一个声明,但这个数组的实际定义将发生在其他地方。

相关问题