C中的`extern int(x)[]`和`extern int x []`有什么区别?

时间:2013-08-05 14:19:11

标签: c global-variables extern variable-declaration

this文章末尾有声明extern int (x)[]。括号是做任何事情还是只是为了混淆?

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

2 个答案:

答案 0 :(得分:6)

不,那些parens没有做任何事情。您链接的文章解释了原因:

  

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

还要注意“外部int的数组”和“int的外部数组”完全相同 - “extern-ness”总是转到声明的对象,在这种情况下是一个数组。就个人而言,我认为描述它的第一种方式在技术上是不准确的,而且简直令人困惑。

答案 1 :(得分:1)

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