【问题标题】:What's the difference between `extern int (x)[]` and `extern int x[]` in C?C中的`extern int (x)[]`和`extern int x[]`有什么区别?
【发布时间】:2013-08-05 14:19:10
【问题描述】:

this 文章末尾有声明extern int (x)[]。括号是做什么用的还是只是为了混淆?

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

【问题讨论】:

  • “他们只是为了混淆”
  • ints 的外部数组与ints 的外部数组不一样吗?
  • 如果您正在研究如何阅读 C 声明,我觉得有必要提及 Clockwise/Spiral Rule

标签: c global-variables extern variable-declaration


【解决方案1】:

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

区分两者的最简单方法是查看展示位置 的类型说明符。如果类型说明符紧跟在 左括号,那个括号是函数的开始 描述符和类型是函数参数的一部分。空的 括号也表示函数。否则括号是 分组(也许是不必要的,但最好有太多而不是 太少)表达。

还要注意“外部整数数组”和“外部整数数组”是完全相同的——“外部性”总是指向被声明的对象,在这种情况下是一个数组。就我个人而言,我认为第一种描述它的方式在技术上是不准确的,而且只是令人困惑。

【讨论】:

  • 我正要从页面中引用这个 EXACT 块。这是一个很好的方式来说明括号的实际含义。 :)
  • 谢谢,我自己读了那个块,但不知道这是否是不必要的情况:)
  • @Juris:我编辑了答案以澄清究竟什么是外部的。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-15
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多