で初期化子で定義された関数と構造体を初期化します。私が持っているたとえば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に保存されるのではなく、私のMCUのフラッシュではありません。 (ツールGNU C11)
標準Cにはありません。 – StoryTeller
Cには関数式(ラムダ関数とも呼ばれます)のようなものはありません。 –
更新プログラムを回答として投稿する必要があります。ちなみに、gcc拡張機能を巧みに使います。 – melpomene