GCC是否为所有方案生成可重入代码?
答案 0 :(得分:4)
答案 1 :(得分:2)
Reentrancy是ISO C和C ++能够设计的,因此包括GCC。编码可重入函数仍然是您的责任。
即使正确编码函数以进行重入,也不会生成可重入代码的AC编译器将是例外而不是规则,并且是出于架构约束的原因(例如,没有足够的资源来支持堆栈,因此生成静态帧)。在这些情况下,编译器文档应该明确这一点。
您可能会阅读的一些文章:
答案 2 :(得分:2)
否,GCC不保证您所编写的代码。这是编写重入代码的好链接。
答案 3 :(得分:1)
重新入侵不是编译器可以控制的东西 - 程序员可以编写可重入代码。要做到这一点,你需要避免所有明显的陷阱,例如全局(包括本地静态变量),共享资源,线程,对其他非重入函数的调用等。
话虽如此,一些用于小型嵌入式系统的交叉编译器,例如: 8051,默认情况下可能不会生成可重入代码,您可能需要通过以下方式请求特定功能的可重入代码。 #pragma
。
答案 4 :(得分:1)
GCC至少在其编译的大多数平台上生成可重入代码(特别是如果您避免按值传递或返回结构)但是特定语言或平台ABI可能会另外规定。你需要更具体地说明任何更有说服力的陈述;我知道如果被编译的代码本身基本上是可重入的,那么它在桌面处理器上肯定是可重入的(当然,奇怪的全局状态技巧会让你在任何平台上遇到麻烦)。
答案 5 :(得分:0)
不,GCC不可能保证你写的重入代码。
但是,在主要平台上,编译器生成或包含的代码(如数学内在函数或函数调用)是可重入的。由于GCC不支持非重入函数调用很常见的平台,例如8051,因此编译器出现重入问题的风险很小。
有GCC端口存在错误和问题,例如MSP430版本。