You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于C标准中声明的定义及语句归类的技术问询

关于C标准中声明的定义及语句归类的技术问询

嘿,这个问题戳中了C语言入门到进阶的一个经典小坑,我当初刚啃C标准文档的时候也卡过这个点!

你提到在《C Primer Plus》(Stephen Prata 著)里,作者把int num;标注为:

int num; <-a declaration statement

但当你翻到C17标准的6.8 #1节时,发现标准对语句的定义里根本没有声明的位置:

statement:
labeled-statement
compound-statement
expression-statement
selection-statement
iteration-statement
jump-statement

这其实是入门教材简化术语 vs 标准严格定义的差异:

  • 教材里的“declaration statement”是为了降低初学者理解门槛的通俗说法,把“声明变量/类型”这类操作和其他可执行语句放在同一个语境下讲解,方便新手快速上手写代码。
  • 但从C标准的严格语法分类来看,声明(declaration)和语句(statement)是两个平行的语法范畴,互相不包含。标准里的语句特指那些会触发执行动作的语法单元(比如表达式语句、循环语句、条件语句这些),而声明的作用是引入标识符、定义对象或函数,它的语法位置可以在块中,但本身不属于语句。

简单说就是:入门阶段把int num;当“声明语句”记没问题,但深入标准的时候要知道,它在语法上是声明,不是语句。

内容来源于stack exchange

火山引擎 最新活动