【发布时间】:2019-12-13 22:19:39
【问题描述】:
我不是 C 方面的专家,但我做得很好,我的主要是嵌入式系统和微控制器编程。
我知道避免使用 GOTO 指令是一种误解,因为它会创建意大利面条式代码。 作为一名微控制器程序员,我经常将汇编语言用于小程序,而 GOTO 是唯一的方法,但就像在 C 中一样(或者不像可能?)在使用指令时必须小心,因为如果你在一个子程序中例如,您可能在堆栈内存中使用了一个空间,因此您可以返回到原始例程。
但是,如果您错误地使用 GOTO 指令从您的子程序跳转到主代码,那么您并没有释放堆栈内存,并且如果您多次调用子程序最终会溢出。
所以我的问题是,当我们在 C 中编写一个嵌套循环时,例如一堆 FOR,并且我们使用 goto 指令从内部循环中中断,这会导致与我之前描述的相同的问题吗?
【问题讨论】:
-
这是不可能的。
-
问题应该集中在
GOTOin C,它不能跳转函数(因此不能改变堆栈或导致堆栈溢出本身) ;或者;专注于可以的'等效'低级汇编指令。考虑适当地更新标签。 -
实现相同的另一种可能性:stackoverflow.com/questions/23823277/…
-
不行,C的
goto关键字只能跳转到同一个函数范围内的标签。自己尝试一下,看看编译器会告诉你什么。 -
我怀疑很多“仇恨”可以追溯到其他控制结构相对较新的时候,但程序员不愿意采用它们(就像说服程序员可以使用高级语言一样需要一段时间用于系统编程而不是组装)。所以语言过于苛刻,因为当
for和/或while更合适时使用goto。现在它被谨慎使用,当其他构造不适合时,没关系。
标签: c assembly stack-overflow microcontroller goto