今天读了读 Rui Maciel 大神写的 mjson parser,mjson 解析器是一个使用 ISO C 实现的小型 JSON 解析器。嵌入式项目中使用到了该解析器,随即拿出来看看。
看到如下代码:
1 enum json_error json_tree_to_string (json_t * root, char **text) 2 { 3 json_t *cursor; 4 rcstring *output; 5 6 assert (root != NULL); 7 assert (text != NULL); 8 9 cursor = root; 10 /* set up the output and temporary rwstrings */ 11 output = rcs_create (RSTRING_DEFAULT); 12 13 /* start the convoluted fun */ 14 state1: /* open value */ 15 { 16 if ((cursor->previous) && (cursor != root)) /*if cursor is children and not root than it is a followup sibling */ 17 { 18 /* append comma */ 19 if (rcs_catc (output, ',') != RS_OK)
第14行的标号,有点小疑问,该不该往下执行不太确定,于是只能动手实验:
1 /* goto.c */ 2 #include <stdio.h> 3 4 void print_goto() 5 { 6 printf("before goto "); 7 8 label: 9 10 printf("after goto "); 11 12 } 13 14 int main() 15 { 16 printf("main "); 17 18 print_goto(); 19 20 return 0; 21 } 22 ~
执行结果如下:
1 wq@ubuntu:~/C_Test$ gcc goto.c -o goto 2 wq@ubuntu:~/C_Test$ ./goto 3 main 4 before goto 5 after goto 6 wq@ubuntu:~/C_Test$
说明,标号下面的代码被执行了。
由于从来没有使用过 goto 关键字编程,也就没想过前面没有goto语句时,这里该怎么执行,导致卡在这里;水水的!
继续看代码……