利用 for 实现一些宏
本文主要介绍利用 for 实现一些宏
for 有一个非常好的特性就是 for 括号分三段: ( 声明部分; 判断表达式; 结尾表达式)
利用这个特性我们可以写一些比较有意思的宏, 比如
线程锁自动进入和退出 利用 for 循环执行结束后会自动执行结尾表达式, 简化资源锁地使用
1
2
3
4
5
6
7
/* 在进入大括号时自动加锁, 退出时自动解锁 */
into_mutex_env(somelock) {
// do something
}利用 for 声明部分定义变量然后在大括号中使用, 参考 因为声明部分的表达式只能定义一种类型的变量, 为了让 for 只执行一次, 这里将指针当作 int 使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ui_style_to_set(styles.msgbox, 0, LV_MSGBOX_PART_BG)
{
lv_style_set_radius(this, LV_STATE_DEFAULT, 5);
lv_style_set_border_width(this, LV_STATE_DEFAULT, 0);
lv_style_set_bg_color(this, LV_STATE_DEFAULT, LV_COLOR_WHITE);
lv_style_set_text_color(this, LV_STATE_DEFAULT, LV_COLOR_BLACK);
lv_style_set_shadow_color(this, LV_STATE_DEFAULT, LV_COLOR_BLACK);
lv_style_set_shadow_width(this, LV_STATE_DEFAULT, 10);
lv_style_set_shadow_ofs_x(this, LV_STATE_DEFAULT, 5);
lv_style_set_shadow_ofs_y(this, LV_STATE_DEFAULT, 5);
}用于断言
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19void assert_failed(void)
{
printf("assert failed\n");
}
int main(int argc, char const *argv[])
{
printf("Hello World\n");
assert(res) {
// do something
res = 0;
}
return 0;
}
评论