在C语言中,是否可以删除未使用的标签并保持程序正常运行



如果一个C源代码有一个未使用的标签,我认为它可能(目前)有用的唯一原因是,如果有人使用它作为"书签",很容易找到一段代码。除上述原因外,是否有任何技术上的原因导致未使用的标签不愿移除?换句话说,是否有可能通过删除编译单元来破坏编译单元,以便外部编译单元可以以某种方式使用它?

编辑:我正在修改的特定代码是c89之前的,因此历史C行为可能会有所不同。

对于C99C11标准来说肯定是安全的,其中明确规定:

标签名是唯一具有函数作用域的标识符。它可以在函数的任何地方使用(在goto语句中)它的语法外观显示并隐式地声明了它(后面跟一个:和一个语句)。

因此,如果标签在函数中未使用,您可以删除它。

p C89 标准有:

标签名是唯一具有函数作用域的标识符。它可以在函数的任何地方使用(在goto语句中)它的语法外观显示并隐式地声明了它(后面跟着一个:和一个语句)。标签名称在一个函数 .

标签再次被限制在函数范围内,但在老的光辉著作K&R C-language中,第58页§3.8 Goto和标签说:

标签的形式与变量名相同,后面跟一个结肠。它可以附加到与转到。标签的作用域是整个函数

所以你可以把它们从任何地方安全地移除

相关内容

最新更新