提问人:Qiuye-Hua 提问时间:10/16/2023 最后编辑:Ken WhiteQiuye-Hua 更新时间:10/16/2023 访问量:66
有没有办法自动将类似函数的宏“提升”到真正的内联函数?
Is there a way to automatically "lift" function-like macros to real inline functions?
问:
我被指派审查和更新一个旧的私人库,其中包含大量宏。do { .. } while(0)
经过一番调查,我决定用静态内联函数替换它们。经过一些手工工作,我很快发现这个过程有点乏味和无脑,这让我想知道是否有办法自动进行“提升”。
我没有找到现有的解决方案。但是,有一个相反方向的项目:https://github.com/akiradeveloper/macro-of-inline。
我想知道是否已经有一个我不知道的现有解决方案,或者是否有可能构建这样一个“提升”工具。
答:
-1赞
DannyNiu
10/16/2023
#1
显然,这个答案需要更新,以解决目前尚不明显的某些缺失细节。
我认为这可以通过在代码编辑器中替换以下内容来完成:
#define
->static inline return_type_t
do
-> 删除此项while(0)
-> 删除此项
此外,所有宏参数都需要添加类型。
评论
2赞
Jonathan Leffler
10/16/2023
这就是困难的部分——论点的合适类型是什么?当宏计算一个值时,如何返回该值?通常,它将分配给宏参数,除非宏假定某些特定变量可供使用。对于我遇到的许多现实世界的宏,需要为几种不同类型的宏提供多个名称——这是这个问题的一个典型例子。自动进行映射并不容易。max
评论
inline