for循环括号内的两个分号

oss*_*sse 25 c syntax parsing for-loop arduino

我定制了一个我在互联网上找到的代码(这是adafruit的推文收据).我无法理解代码的许多部分,但最令我困惑的是括号内有两个分号的for循环

boolean jsonParse(int depth, byte endChar) {
  int c, i;
  boolean readName = true;

  for(;;) {  //<---------
    while(isspace(c = timedRead())); // Scan past whitespace
    if(c < 0) return false; // Timeout
    if(c == endChar) return true; // EOD

    if(c == '{') { // Object follows
      if(!jsonParse(depth + 1, '}')) return false;
      if(!depth) return true; // End of file
      if(depth == resultsDepth) { // End of object in results list
Run Code Online (Sandbox Code Playgroud)

什么是对(;;)是什么意思?(这是一个arduino程序所以我猜它在C中)

tao*_*ocp 61

for(;;) {
}
Run Code Online (Sandbox Code Playgroud)

功能意味着

 while (true) {
 }
Run Code Online (Sandbox Code Playgroud)

它可能会根据循环体内的某些条件打破循环/从循环返回.

for(;;)永远循环的原因是因为for有三个部分,每个部分都是可选的.第一部分初始化循环; 第二个决定是否继续循环,第三个在每次迭代结束时做一些事情.它是完整的形式,你通常会看到这样的东西:

for(i = 0; i < 10; i++)
Run Code Online (Sandbox Code Playgroud)

如果缺少第一个(初始化)或最后一个(迭代结束)部分,则不会执行任何操作.如果缺少中间(测试)部分,那么它就好像true在那里一样.所以for(;;)for(;true;)' 一样(如上所示)是相同的while (true).

  • 或者...`#define ever ;;` 这样你就可以写`for (ever){ ... }` (8认同)

Fls*_*Zen 5

for循环由 3 个部分组成,各部分之间用分号分隔。第一个组件在循环开始之前运行,通常用于初始化变量。第二个是条件。在每次迭代开始时都会检查条件,如果计算结果为 true,则循环中的代码将运行。第三个组件在循环结束时、另一次迭代(从条件检查开始)开始之前执行,并且通常用于递增变量。

在你的情况下for(;;)意味着它将永远循环,因为条件不存在。return当代码s 或breaks时循环结束。