模拟 GCC 语句表达式

2024-03-03

我被迫使用 IAR EW430 编译器 v7.12 进行嵌入式项目,并且它仅正式支持 c99。

我希望能够通过除了编写一堆专用内联函数之外的任何方式以通用方式模拟 GCC 的语句表达式。

有什么办法可以实现这一点吗? (也许使用 MACRO-wizardry?或者模拟 Lambda,或者一些允许这样做的隐藏编译器开关?)显然除了更改编译器之外。

具体来说,复合表达式最后一条语句的结果应将其类型和值都带出,而不是将其作为宏参数传入。

我已经寻找了几个月,但我能得到的最接近的是令人印象深刻的令人印象深刻的图书馆 https://github.com/Leushenko/C99-Lambda,但这似乎是一个可怕的事情。


我知道这不是您正在寻找的答案,但既然您问“有什么办法可以实现这一目标吗?”,我不得不说答案很简单:“不”。

不要误会我的意思——我知道您在寻找什么,以及为什么想要它。这是一个非常酷的功能。曾几何时,我试图发明自己的类 C 语言,我的目标之一是每个语句都可以用作表达式。但这个功能根本不是 C 的一部分,并且没有合适的方法来模拟它。

事实上,您可以很容易地证明没有合适的方法来模拟它,因为如果有的话,gcc 人员就不必实现那些疯狂的、非标准的扩展。

因此,如果您想使用 gcc 及其扩展,请务必使用 gcc 及其扩展。但如果您想用相当纯的 C 语言编写,您只需学会在没有语句表达式的情况下生活。 “在罗马做到入乡随俗。”你用疯狂的宏魔法所实现的任何东西都可能(a)不能真正满足你对真实语句表达式的渴望,(b)使你的程序的维护对于那些追随你并且不理解它们有什么伟大之处的人来说成为一场噩梦。

你说你正在做嵌入式工作,但你确定没有适合你的平台的 gcc 端口吗? (我知道你说你“被迫”使用IAR,但你也说这是一个“玩具项目”,所以也许你可以打破这个规则。无论如何,IAR总是让我想起维基百科的口号“忽略所有规则” .:-) )

但既然你说你正在做嵌入式工作,这就是阻止这种超前功能狂热的另一个原因。我得到的印象是,“嵌入式工作”的定义特征之一是,它无论如何都试图拒绝使用一半的语言,强制只使用定义极其明确、极其安全的子集。所以我怀疑像语句表达式这样的扩展是否会适合您的项目。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模拟 GCC 语句表达式 的相关文章

随机推荐