是适用于C语言的Gnu编译器限制
is Gnu compiler restrictions applicable to C language
Gnu C编译器(gcc)允许标签作为值作为语言扩展:http://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html但是文档说:
如果我们使用这种机制跳转到另一个函数中的代码,那么完全可以不可预测的事情会发生。对于类c语言有什么限制?
这个限制不仅存在于GCC中,而且存在于C标准本身。
标签名是唯一具有函数作用域的标识符。它可以在函数的任何地方使用(在goto语句中)它的语法外观显示并隐式地声明了它(后面跟着一个:和一个语句)。
(来自N1548,§6.2.1.3)。
拥有"标签变量"并不能改变不同函数中的环境(例如;Stack)是完全不同的(与单个函数内部不同,预测它将是什么是不可能的);跳来跳去几乎会破坏一切。
堆栈问题更精确地说:目标函数中的局部函数变量的值是未知的,函数参数是未知的,一旦目标函数结束就不知道程序应该在哪里继续等等。(栈不是唯一的问题)
相关文章:
- 为什么 C++ 编译器在"c:program filesgnu emacsinclude"中查找包含文件?
- _mm512_exp_pd与 GNU 编译器一起使用
- template-id 与任何模板声明 GNU gcc 编译器都不匹配
- Arm GNU编译器:通过多余的强制转换优化的三进制生成的程序集
- 创建对链表向量时 Gnu 编译器的错误:无效使用"::"
- 通过 GNU 编译器计算 CPP 内联代码行
- QT 5.7将-STD = GNU 11添加到我的编译器标志,Clobbering -Std = C 14
- 我需要帮助弄清楚为什么此C 程序不会使用GNU CC编译器在代码块中构建和运行
- Solaris 上的 GNU gcc/g++ 编译器版本,支持 C++11/14
- 与英特尔相比,GNU C++编译器在对向量进行排序时性能较差
- "-D__STDC_FORMAT_MACROS" GNU 编译器选项
- 字符* 常量值 ERROR 与 GNU G++ 编译器
- 使用GNU C++为Maya编译时出现编译器错误
- GNU 编译器与 Visual Studio 在分配的数组上分配了长度常量,在作用域中
- 是否有一个 GNU C 编译器选项可以生成运行速度更快但精度低于默认设置的浮点程序
- 使用nVIDIA编译器为我的GNU编译器生成要链接的共享库时发生运行时错误
- CLANG与GNU编译器集合-在GNU中编译,但在CLANG中失败
- GNU GCC 编译器错误"multiple definition of main"
- 启用-std=c++0x或-std=gnu++0x编译器选项
- 模板类中的尾随返回类型(GNU和Microsoft编译器之间的矛盾)