我有一种暗示,有一种旧的讨厌的方法可以让函数在计算参数时运行,但是我不知道它叫什么,我无法搜索出规则。
一个例子
char dstr[20];
printf("a dynamic string %s\n", (prep_dstr(dstr),dstr));
这个想法是“()”将在执行 prep_dstr 函数后返回地址 dstr。
我知道这很丑陋,我之前可以在线上做 - 但它很复杂......
#好的 - 回应请求不要这样做。
我实际上正在对一些现有代码进行 MISRA 清理(不是我的,不要拍我),目前“prep_dstr”函数需要一个缓冲区来修改它(不考虑缓冲区的长度)并返回它传递的指针一个参数。
我喜欢迈出一小步——测试然后再迈出一小步。
所以 - 比返回一个不知道它的持久性的指针稍微不那么讨厌的方法是停止函数返回一个指针并使用逗号运算符(在确保它不会从缓冲区的末尾跳出之后)。
这会使 MISRA 错误倒计时,当它仍然有效并且 MISRA 错误消失时,我将尝试优雅地解决 - 也许是后年:)。