【问题标题】:What is the difference between a qualifier and a modifier in C?C中的限定符和修饰符有什么区别?
【发布时间】:2012-02-20 11:25:44
【问题描述】:

我想知道限定符和修饰符之间的区别。有的书建议volatile是修饰符,有的书把它当作限定符。

那么对于变量,修饰符和限定符到底是什么?

【问题讨论】:

  • 额外问题:“声明说明符”在哪里适合?
  • @Kos:“声明说明符”是一个更通用的类别。 C 语法中实际上没有单数的“声明说明符”,但“声明说明符”是存储类说明符的列表(typedefstaticexternautoregister )、类型限定符(constrestrictvolatile)、函数说明符(inline)和类型名称(非正式地)说明实际定义的内容。
  • 问这本书的作者,他们突然想出了“修饰符”这个词。没有这个词。

标签: c


【解决方案1】:

在 C 术语中,volatile 是一个限定符

constrestrictvolatile 和 C11 _Atomic 是 C 类型限定符。

C 术语在声明对象时不使用词修饰符

【讨论】:

  • 您对存储类的看法是什么,它们也属于限定词吗?
  • staticextern 是存储类说明符,而不是限定符。一个区别是它们仅用于定义,而限定符可用于声明。
  • @ugoren:不过,语法上没有这样的区别。只是标准状态的各个部分几乎所有带有存储类说明符的对象声明都是一个定义,一种方式或另一种方式(因为它是自动的,或者因为它是暂定定义,或者因为它是外部定义,或者可能其他我没有想到的定义)。
  • 我明白你的意思,是的。没有指向外部的指针或指向静态的指针之类的东西,指针不“知道”它的引用具有什么存储类。但是有一些指针到常量和指针到易失性,这些是“类型本身”的属性,指针当然需要“知道”引用的类型。
  • 通过 C11 标准的文本搜索验证了这个答案。 C 语言中没有任何东西称为“修饰符”。 C 中有一种叫做“长度修饰符”的东西,但这是 print/scanf 函数中字母 l, ll, L 等的正式术语。这当然与 volatile 完全无关。
猜你喜欢
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 2020-12-23
  • 2011-01-15
  • 1970-01-01
相关资源
最近更新 更多