0
GNU C编译器(GCC)允许标签的值作为一门语言扩展: http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html 但文件说:适用于C语言的GNU编译器限制
如果我们用这种机制来跳到代码一个不同的功能,然后完全不可预知的事情会发生。 我们对c语言有什么限制?
GNU C编译器(GCC)允许标签的值作为一门语言扩展: http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html 但文件说:适用于C语言的GNU编译器限制
如果我们用这种机制来跳到代码一个不同的功能,然后完全不可预知的事情会发生。 我们对c语言有什么限制?
该限制不是(仅)在GCC中,而是在C标准本身中。
标签名称是唯一具有功能范围的标识符。 它可以在出现 的函数中的任何位置使用(在goto语句中),并且通过其语法外观 (后跟一个:和一个语句)进行隐式声明。
(来自N1548,第6.2.1.3节)。 “标签变量”不会改变不同功能(例如堆栈)中的环境完全不同的事实(并且不同于单个函数内部,预测它不可能是什么);跳来跳去几乎会打破所有的一切。
堆栈问题更准确地说:目标函数中局部函数变量的值是未知的,函数参数是未知的,一旦目标函数结束,它就不知道程序应该继续在哪里等等。 (并且堆栈不是唯一的问题)