在C文件中使用相同的goto标签,但功能不同

问题描述:

有人可以告诉我,如果在同一个C文件的不同功能中使用相同的goto标签是否可以接受?在C文件中使用相同的goto标签,但功能不同

为了解释我面对什么:

function1() 
{ 
    ... 

    goto label 

    ... 

label: 
    ... 
} 

function2() 
{ 
    ... 

    goto label; 

    ... 

label: 
    ... 
} 

现在发生了什么是标签之后的代码被用于malloc分配“的数据清理。整个事情在function2中崩溃。我打印出了内存。自由和相同的地点被释放多次。这是因为所有的gotos?这是对goto语句的有效使用吗?

+1

请正确设置您的问题。 – Alex 2013-04-25 07:34:36

+0

尝试发布一些代码以获取实际问题... – akp 2013-04-25 07:36:10

+0

您可以在不同的功能中使用相同的标签名称,但不能使用另一个功能中的*标签。您的崩溃与重新使用的标签名称无关。你的代码有其他错误,导致双重空闲。 – 2013-04-25 07:38:58

标签是本地的,所以您可以在多个功能中使用相同的标签。

关于是否应该使用goto的问题是一个不同的问题,但一个不容易回答的问题。总之,不要使用goto。但与所有内容一样(特别是在编程方面),有一些例外,goto可能有用。

+8

使用goto进行清理往往是其中之一。 – Medinoc 2013-04-25 08:19:16

+1

当构建/拆卸很复杂(例如:linux内核)时,goto被非常频繁地使用,并且各种退出条件会重用其他代码(例如:分配/释放资源)。在这些情况下,使用goto更清晰,并确保贯穿机制将在各个拆除阶段执行完全相同的序列。 – 2017-05-22 17:36:16

约阿希姆在这里说,标签是本地的;但请注意,标签对于功能而言是本地的 - 而不是当前的块。 goto语句不考虑作用域,除了全功能作用域。