c++ - Gnu 编译器限制是否适用于 C 语言

标签 c++ c gcc compiler-construction gnu

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

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

最佳答案

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

A label name is the only kind of identifier that has function scope. It can be used (in a goto statement) anywhere in the function in which it appears, and is declared implicitly by its syntactic appearance (followed by a : and a statement).

(来自 N1548,§6.2.1.3)。

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

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

关于c++ - Gnu 编译器限制是否适用于 C 语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33205809/

相关文章:

c - 我需要为编译器指定一个间接使用的库吗?

linux - 在 64 位 Debian wheezy 多架构主机上编译使用 ssl 的 32 位二进制文​​件

c++ - 使用\in 字符串作为文字而不是转义符

c++ -/usr/bin/ld : warning: abc. 所以,找不到 xyz.so 所需(尝试使用 -rpath 或 -rpath-link)”

c++ - 如何解析包含小数时间的日期时间字符串?

c - 序列栈和结构体指针

C: Shell 程序接收异常的额外操作数

c++ - 为什么虚拟表中有两个虚拟析构函数,非虚拟函数的地址在哪里(gcc4.6.3)

c++ - 减小 Qt GUI 应用程序的大小

c++ - Qt QOpenGLWidget glClearColor 无法正常运行