Gun*_*ulz 2 c lambda closures c99 c-preprocessor
我被迫使用 IAR EW430 编译器 v7.12 用于嵌入式项目,它只正式支持 c99。
我希望能够通过任何方式以通用方式模拟 GCC 的语句表达式,而不是编写一堆专用的内联函数。
有没有办法实现这一目标?(也许使用 MACRO-wizardry?或者模拟 Lambda,或者一些允许这样做的隐藏编译器开关?)显然不是改变编译器。
具体来说,复合表达式的最后一条语句的结果应该同时携带其类型和值,而不是作为宏参数传入的那些。
我已经搜索了几个月,但我能得到的最接近的是令人印象深刻的图书馆,但这似乎是一个非常多的东西。
我意识到这不是您要寻找的答案,但是既然您问“有什么方法可以实现这一目标?”,我不得不说答案是“否”。
不要误会我的意思——我知道你在寻找什么,以及你为什么想要它。这是一个非常酷的功能。曾几何时,我试图发明我自己的类 C 语言,我的目标之一是每个语句都可以用作表达式。但是这个特性根本就不是 C 的一部分,也没有像样的方法来模拟它。
事实上,你可以很容易地证明没有像样的方法来模拟它,因为如果有,gcc 人员就不必实现那些疯狂的、非标准的扩展。
因此,如果您想使用 gcc 及其扩展,请务必使用 gcc 及其扩展。但是如果你想用相当纯的 C 语言编写,你就必须学会在没有语句表达式的情况下生活。“在罗马做到入乡随俗。” 你用疯狂的宏魔法设法实现的任何事情都可能 (a) 不能真正满足你对真实语句表达式的渴望,并且 (b) 使你的程序维护成为任何追随你的人的噩梦,他们不明白他们有什么好处.
你说你在做嵌入式工作,但你确定你的平台没有 gcc 端口吗?(我知道你说你“被迫”使用 IAR,但你也说这是一个“玩具项目”,所以也许你可以打破这个规则。无论如何,IAR 总是让我想起维基百科的口号“忽略所有规则” . :-) )
但既然你说你在做嵌入式工作,那就是阻止这种边缘特性的另一个原因。我得到的印象是“嵌入式工作”的定义特征之一是它试图拒绝使用一半的语言,只强制使用定义非常明确、非常安全的子集。所以我怀疑像语句表达式这样的扩展是否会适用于您的项目。