Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Two semicolons inside a for-loop parentheses

I'm customising a code I found over the internet (it's the Adafruit Tweet Receipt). I cannot understand many parts of the code but the most perplexing to me is the for-loop with two semicolons inside the parentheses

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 

What does for(;;) mean? (It's an Arduino program so I guess it's in C).

like image 751
osse Avatar asked Apr 19 '13 20:04

osse


2 Answers

for(;;) { } 

functionally means

 while (true) {  } 

It will probably break the loop/ return from loop based on some condition inside the loop body.

The reason that for(;;) loops forever is because for has three parts, each of which is optional. The first part initializes the loop; the second decides whether or not to continue the loop, and the third does something at the end of each iteration. It is full form, you would typically see something like this:

for(i = 0; i < 10; i++) 

If the first (initialization) or last (end-of-iteration) parts are missing, nothing is done in their place. If the middle (test) part is missing, then it acts as though true were there in its place. So for(;;) is the same as for(;true;)', which (as shown above) is the same as while (true).

like image 88
taocp Avatar answered Oct 07 '22 13:10

taocp


The for loop has 3 components, separated by semi-colons. The first component runs before the looping starts and is commonly used to initialize a variable. The second is a condition. The condition is checked at the beginning of each iteration, and if it evaluates to true, then the code in the loop runs. The third components is executed at the end of the loop, before another iteration (starting with condition check) begins, and is often used to increment a variable.

In your case for(;;) means that it will loop forever since the condition is not present. The loop ends when the code returns or breaks.

like image 24
Fls'Zen Avatar answered Oct 07 '22 13:10

Fls'Zen