在初始化定义例如我有:初始化结构与功能用C
typedef struct {
uint32_t* param_ptr;
uint32_t (*check_value)(uint32_t);
} Parameter;
uint32_t a = 8;
const Parameter work = { .param_ptr = &a, .check_value = (uint32_t value) {return value>10?value:10;} };
int main1(void) {
//check
*work.param_ptr = work.check_value(*work.param_ptr);
}
我要声明“小”结构初始化内部功能。由于有很多“参数”,我不想声明单独的函数和它们的主体,并将其名称传递给初始化。无论如何要这样做?
UPD1:
#define lambda(return_type, function_body) \
({ \
return_type __fn__ function_body \
__fn__; \
})
typedef struct {
uint32_t* param_ptr;
uint32_t (*check_value)(uint32_t);
} Parameter;
uint32_t a = 8;
void main(void) {
Parameter work = { .param_ptr = &a, .check_value = lambda(uint32_t, (uint32_t value){return value > 10 ? value : 10;}) };
*work.param_ptr = work.check_value(*work.param_ptr);
}
感谢的意见,我通过关键词找到熟悉的QA。那么,这种方式可以正常工作,但有些缺点 - 它不是全局常量,因此保存在RAM中,而不是我的单元的FLASH。 (工具GNU C11)
不是标准C. – StoryTeller
C没有像函数表达式(也称为lambda函数)的东西。 –
您应该将更新发布为答案。顺便说一下,聪明地使用gcc扩展。 – melpomene