关于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




