在不牺牲清晰度的情况下,是否有更简洁的方法来重写以下功能?
function uint64_t pop_int(uint8_t** p, int num_bytes)
{
uint64_t res = decode_int(*p, num_bytes);
*p += num_bytes;
return res;
}
我所能想到的只是
return decode_int((*p += num_bytes) - num_bytes, num_bytes);
但是如果该语言具有类似您可以使用的FIRST
函数之类的东西,则会更清楚:
return FIRST(decode_int(*p, num_bytes), *p += num_bytes);
,但必须清楚,参数是按顺序求值的。
答案 0 :(得分:2)
在C语言中,您编写的是用于解决任务的惯用代码。
在最终尝试的语言中,您可以使用它,它也许会更清晰。但是C没有此功能。
答案 1 :(得分:0)
终于找到了……我需要的语法是({... ; expr})
(在linux内核的CIRC_SPACE_TO_END宏中使用)。
对于我的例子,我需要的是:
#define POST_INC(type, a, b) ({type* tmp = a; a += b; tmp;})
示例用法:
int main()
{
char const* str = "hello, world";
printf("%s\n", POST_INC(char const, str, 5));
printf("%s\n", POST_INC(char const, str, 2));
printf("%s\n", POST_INC(char const, str, 5));
}
结果:
hello, world
, world
world
很高兴我没有放弃!