这样的代码,实在不理解是怎么运行的啊

吾爱 发布于 2014/11/18 21:12
阅读 518
收藏 2
#include <stdio.h>

typedef struct
{
    int i;
    int num;
    int state;
} task;

int cb(task *t)
{
    switch (t->state) {
    case 0:
        for (;;) {
            t->num = 1;
            for (t->i = 0; t->i < 20; t->i++) {
                t->state = __LINE__ + 2;
                return t->num;
    case __LINE__:
                t->num += 1;
            }
        }
    }
}

int main()
{
    task t;
    int i;

    t.state = 0;

    for (i = 0; i < 100; i++) {
        printf("%d ", cb(&t));
    }
    return 0;

}

就是 cb 函数内, case 语句插入了for循环中,不知道为什么能这样写,组后输出结果是5组 1~20的序列


加载中
0
顾伟刚
顾伟刚

http://en.wikipedia.org/wiki/Switch_statement#Semantics

goto 有两种形式,非结构化类似于goto lable这种

吾爱
吾爱
刚哥v5
0
风之轮
风之轮
能编译执行啊,感觉像是笔误啊
0
无尽思绪
无尽思绪

没啥奇怪的啊
case语句里面就是代码,插入for当然可以了

0
有明丶
有明丶
这是编译器分析器的漏洞造成的,本身不符合语法规范,但是可以被编译执行。
0
乌龟壳
吾爱
吾爱
http://jishu.zol.com.cn/228759.html 这个解释的更详细些哈
0
xiaoran677
xiaoran677
Case里面可以加代码的啊
0
Micooz
Micooz
简单协程的实现
返回顶部
顶部