是适用于C语言的Gnu编译器限制

is Gnu compiler restrictions applicable to C language

本文关键字:编译器 Gnu 适用于 语言      更新时间:2023-10-16

Gnu C编译器(gcc)允许标签作为值作为语言扩展:http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html但是文档说:

如果我们使用这种机制跳转到另一个函数中的代码,那么完全可以不可预测的事情会发生。对于类c语言有什么限制?

这个限制不仅存在于GCC中,而且存在于C标准本身。

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

(来自N1548,§6.2.1.3)。

拥有"标签变量"并不能改变不同函数中的环境(例如;Stack)是完全不同的(与单个函数内部不同,预测它将是什么是不可能的);跳来跳去几乎会破坏一切。

堆栈问题更精确地说:目标函数中的局部函数变量的值是未知的,函数参数是未知的,一旦目标函数结束就不知道程序应该在哪里继续等等。(栈不是唯一的问题)