【问题标题】:is Gnu compiler restrictions applicable to C language是适用于 C 语言的 Gnu 编译器限制吗
【发布时间】:2016-01-17 07:00:34
【问题描述】:

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

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

【问题讨论】:

    标签: c++ c gcc compiler-construction gnu


    【解决方案1】:

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

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

    (来自 N1548,§6.2.1.3)。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 2020-06-05
      • 2015-02-15
      • 2011-02-14
      • 1970-01-01
      • 2011-03-20
      相关资源
      最近更新 更多