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

use*_*285 18 c goto

有人可以告诉我是否可以在同一个C文件中的不同函数中使用相同的goto标签?

解释我面临的问题:

function1()
{
    ...

    goto label

    ...

label:
    ...
}

function2()
{
    ...

   goto label;

    ...

label:
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在发生的事情是标签之后的代码被用于清理malloc'ed'数据.整个事情在function2中崩溃了.我打印出了mem.免费和相同的位置被多次释放.这是因为所有的冒险?这是goto语句的有效使用吗?

Som*_*ude 23

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

关于你是否应该使用的问题goto是一个不同的问题,而且是一个不容易回答的问题.总之,不要使用goto.但是就像所有事情一样(特别是在编程方面),有些例外goto可能有用.

  • 使用goto进行清理往往是其中之一. (16认同)
  • 当构建/拆卸很复杂(例如:linux 内核)并且各种退出条件会重用其他人的代码(例如:分配/释放资源)时,goto 会被频繁使用。在这些情况下,使用 goto 更干净,并确保失败机制将在拆卸的各个阶段强制执行完全相同的顺序。 (3认同)

Ela*_*zar 11

正如约阿希姆在这里所说,标签是本地的; 但请注意,标签是函数的本地标签 - 而不是当前块.goto除了全功能范围之外,语句不尊重范围.