【发布时间】:2010-12-16 17:34:24
【问题描述】:
我知道了
声明的类型说明符 参数列表中的标识符 函数原型中的声明 (不是函数定义的一部分), 标识符有函数原型 范围,在结束时终止 函数声明器。
请看下面提到的C程序。
void fn (struct st {int a;} a, struct st b) ;
struct st obj ;
编译器会立即发出错误,因为“obj”大小未知(或)struct st 不是“类型”。这是正确的!结构“struct st”的声明在原型声明处结束。
我相信原型有这个限制,因为我们也可以在原型声明中使用一些变量名。这些名称可能与同一范围内的变量(如函数原型)冲突。如下所示。
void fn (int a) ;
int a ;
因此,为了允许上述声明,原型的范围是有限的。 (如果我错了,请纠正我)
但是,对于原型声明,参数变量名是没有用的。那么,为什么它是“狭义的”?有参数变量名有什么意义?语言设计者(或)规范对此有何想法?
【问题讨论】:
-
你写“允许”的地方我认为你的意思是“范围狭窄”,其他人可能会认为“不允许在范围之外使用”。因此,当另一个短语(例如“范围狭窄”)可能起作用时,我会避免使用“允许”这个词。
-
@Heath 谢谢!我已经更正了。
-
我更喜欢总是 typedef 我将要使用的结构,并且没有遇到这个问题。
-
你在编写代码时需要始终牢记可读性,一些技术性的东西可能会根据这个或那个 ANSI-C 规则工作,但主要的事情是编写人们可以阅读而不是误解的代码。跨度>
-
@Anders 没错!我总是可以用好的 cmets 做到这一点。但是为什么语言支持这些东西只是为了可读性呢?
标签: c prototype scope designer specifications