print_once, como está funcionando?
Eu estou tentando entender implementar uma impressão uma vez função, esse código está funcionando bem; Mas eu não sou capaz de entender algumas coisas: 1) Quão blockwise isso está funcionando? Talvez eu não seja capaz de limpá-lo corretamente, mas apenas quero saber, que propriedadeC fazer isso acontecer?
1 #include <stdio.h>
2
3 #define _TRACE_
4
5 #ifdef _TRACE_
6 #define print_once(fmt, ...) \
7 ({ \
8 static bool __print_once=false; \
9 if(!__print_once) { \
10 __print_once = true; \
11 do { \
12 printf(fmt, ##__VA_ARGS__); \
13 }while(0); \
14 } \
15 })
16 #else
17 #define print_once(fmt, ...) \
18 printf("\n");
19 #endif
20
21 void func()
22 {
23 print_once("func\n");
24 }
25 int main(int argc, char* argv[])
26 {
27 print_once("test1\n");
28 //:w
29 print_once("test22\n");
30 for(int i =0; i < 2; i++)
31 print_once("loop\n");
32 func();
33 func();
34 return 0;
35 }