在C语言中,可以删除未使用的标签并保持程序正常工作吗?

在C语言中,可以删除未使用的标签并保持程序正常工作吗?,c,label,C,Label,如果一个C源代码有一个未使用的标签,那么我认为它(目前)可能有用的唯一原因是,如果有人将它用作一个“书签”,以便轻松查找代码段。除此之外,是否有任何技术原因导致不希望移除未使用的标签?换句话说,是否可以通过删除编译单元来破坏它们,以便外部编译单元可以以某种方式使用它 编辑:我正在修改的特定代码是C89之前的代码,因此历史的C行为可能会有所不同。对于C99,C11标准来说肯定是安全的,其中明确规定: 标签名称是唯一具有功能范围的标识符。 它可以(在goto语句中)在函数中的任何位置使用 它出现,并

如果一个C源代码有一个未使用的标签,那么我认为它(目前)可能有用的唯一原因是,如果有人将它用作一个“书签”,以便轻松查找代码段。除此之外,是否有任何技术原因导致不希望移除未使用的标签?换句话说,是否可以通过删除编译单元来破坏它们,以便外部编译单元可以以某种方式使用它


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

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

标签名称是唯一具有功能范围的标识符。 它可以(在goto语句中)在函数中的任何位置使用 它出现,并通过其语法外观隐式声明 (后接a:和声明)

因此,如果函数中未使用标签,可以将其删除

PSC89标准中,我们有:

标签名称是唯一具有功能范围的标识符。 它可以(在goto语句中)在函数中的任何位置使用 它出现,并通过其语法外观隐式声明 (后接a:和声明)标签名称应在 函数

标签再一次被限制在功能范围内,但在《K&R C-language》一书的第58页第3.8节“Goto and labels”
中也有这样的规定:

标签的形式与变量名相同,后面跟一个 科隆。它可以附加到与 后藤标签的范围是整个功能


因此,您可以安全地将它们从任何地方移除。

将与goto一起使用的语句标记为已标记语句?如果它们确实未使用,则移除它们应该是安全的。要想破解某些东西,代码或编译器必须有一些神秘和错误,我想。如果它只用于书签,我想它不会破坏任何东西,但是我现在没有C文档,所以最好等待asnwer。您也可以尝试通过要求编译器生成程序集输出并比较有标签和没有标签的版本来衡量影响。您的代码使用asm语句吗?C模块中的标签通常由编译器作为标准汇编程序标签发出。因此,虽然我在回答中所说的对于语言控制下的C语句仍然是正确的,但嵌入式汇编语句可以使用标签在函数之间跳转。我会在问题中提及这一点。不过,您的回答非常有用,最终可能会得到绿色的复选标记。@Dr.PersonPersonII不客气。请看我的更新。你太棒了。买一本K&R的书已经在我的待办事项清单上很多年了。我真的需要这么做。再次感谢。@Dr.PersonPersonII《K&R》是世界遗产,应该被联合国教科文组织采纳。但你可以在网上找到副本,只需搜索“K&R C语言pdf”;-)确定是否可以删除标签的最快方法是对其进行注释并重新编译。