【问题标题】:Is it possible that a declarator has zero declaration specifier?声明符是否可能具有零声明说明符?
【发布时间】:2013-07-19 17:37:55
【问题描述】:

关于声明;

C 和 C++ 中的每个对象声明都有两个主要部分:零个或多个声明说明符的序列,以及一个或多个声明符的序列,用逗号分隔。 例如:

零说明符是否意味着将名为a的变量声明为

a;

而不是

int a;

? 我用一个例子试过这个

#include <stdio.h>

int main(){
     x = 9; 
     printf("%d\n", x);

return 0; 
}  

这是一个错误:

[Error] 'x' undeclared (first use in this function) 

【问题讨论】:

  • 你从哪里得到这个声明的?这显然是错误的。
  • 对于具有“隐式 int 规则”的预标准化 C 来说可能是正确的。无论如何,这不应该被使用。
  • @CarlNorum;我从here 得到这个
  • 听起来像 C89 之前的 C,当时有效,但不允许使用 C89 和转发。很高兴您已准备好参考。

标签: c declaration specifier


【解决方案1】:

在 c89 中可以使用隐式 int 规则,但您至少需要一个限定符或存储类说明符。

auto x = 3;   /* allowed in c89, not valid in c99 */

static y = 4; /* allowed in c89, not valid in c99 */

const z = 5;  /* allowed in c89 , not valid in c99*/

a;      /* not valid in c89, c99 without a prior declaration */

b = 6;  /* not valid in c89, c99 without a prior declaration */

【讨论】:

  • 但是所有这些声明都使用了一个说明符!
  • @hacks const 是限定符而不是说明符。
  • 我读到了关于 它改变数据类型特征的限定符,例如它的 sizesignsigned呢,是限定符还是说明符?
  • 限定符不会改变大小或符号,您说的是类型说明符。 signed 是一个类型说明符。
  • @hackks 不,我不认为我错了。类型限定符是constvolatilerestrict_Atomic。参见 c11, 6.7.3 类型限定符。
【解决方案2】:

无论您从哪里得到该声明,都是错误的。您必须至少有一个 declaration-specifier 才能使声明有效。以下是标准中的相关部分(这是一张图片,因为我无法让 markdown 行为):

【讨论】:

  • 我从magazine snippet(1998 年 6 月嵌入式系统编程)那里得到这个
猜你喜欢
  • 1970-01-01
  • 2014-12-10
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-22
  • 2015-06-28
相关资源
最近更新 更多