-5
while ( fgets(eqvline, 1024, eqvfile) != NULL ) {

    eqvline[strlen(eqvline)-1] = '\0';

    if (!strcmp (eqvline, "$SIGNALMAP")) {
        start_store_mask = 1;
        continue;
    }

    if (!strcmp (eqvline, "$SIGNALMAPEND")) {
        _num_mask_pins = i;
        sim_inform ( sim, "[vTPSim] Total of %d pins found in equivalent file.\n", _num_mask_pins);
        //return;
        start_store_mask = 0;
    }
}

你能解释一下continue;这段代码中的实际工作原理吗?执行时continue;,代码跳转到哪里?再比较一下eqvline那个读新行?那么这段代码什么时候会if (!strcmp (eqvline, "$SIGNALMAPEND")) {被调用呢?

4

2 回答 2

3

continue 语句将控制权传递给它出现的最近的封闭 do、for 或 while 语句的下一次迭代,绕过 do、for 或 while 语句主体中的任何剩余语句。

在您的代码中,在continue;执行之后,会立即检查 while 循环的条件。

如果条件满足,则控制进入循环内部。第一的

 eqvline[strlen(eqvline)-1] = '\0';

被执行。

然后,声明

 if (!strcmp (eqvline, "$SIGNALMAP"))

被执行。

于 2013-07-11T06:16:01.393 回答
2

不,不会的。continue跳转到循环的开头,即首先测试条件(因为while构造在执行之前测试,不像do-while),所以你将立即执行continue的是

fgets(eqvline, 1024, eqvfile) != NULL

然后,根据这个表达式的值,

eqvline[strlen(eqvline)-1] = '\0';

或循环体之后的第一条语句。

于 2013-07-11T06:13:42.670 回答