这段代码中的“继续”是如何工作的?
Posted
技术标签:
【中文标题】这段代码中的“继续”是如何工作的?【英文标题】:How does “continue" work in this code? 【发布时间】:2013-07-11 06:11:03 【问题描述】: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"))
什么时候会被调用呢?
【问题讨论】:
当 continue 被调用时 主体中的其余语句被忽略,并在循环顶部继续执行,并评估循环的测试(在您的情况下为 fgets)。 @Jonathan Leffler 谢谢指正。抱歉我的英语不好。 【参考方案1】:continue 语句将控制权传递给 它出现的最近的封闭 do、for 或 while 语句, 绕过 do、for 或 while 语句中的任何剩余语句 身体。
在您的代码中,在执行continue;
之后,会立即检查while 循环的条件。
如果条件满足,控制进入循环内部。首先
eqvline[strlen(eqvline)-1] = '\0';
被执行。
然后,声明
if (!strcmp (eqvline, "$SIGNALMAP"))
被执行。
【讨论】:
【参考方案2】:不,不会。 continue
跳转到循环的开头,即。 e.首先将测试条件(因为while
构造测试之前 执行,不像do-while
),所以你将在continue
之后立即执行的是
fgets(eqvline, 1024, eqvfile) != NULL
那么,根据这个表达式的值,
eqvline[strlen(eqvline)-1] = '\0';
或循环体之后的第一条语句。
【讨论】:
值得注意的是,如果代码是for
循环,那么continue
将继续使用reinitialization
中的reinitialization
代码?以上是关于这段代码中的“继续”是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章
Javascript,IF 语句中的逗号 - 试图理解这段代码