在初始化定義例如我有:初始化結構與功能用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