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

问题描述 投票:0回答:1

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

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

c++ c gcc gnu
1个回答
1
投票

限制不仅仅存在于 GCC 中,还存在于 C 标准本身中。

标签名称是唯一一种具有函数作用域的标识符。 它可以在函数中的任何地方(在 goto 语句中)使用,其中 它出现,并通过其语法外观隐式声明 (后跟 : 和声明)。

(来自 N1548,第 6.2.1.3 节)。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.