**ISO/IEC 9899:1999**

> 
> **7.13.1.1 The setjmp macro**
> 
> 
> Environmental limits 4 An invocation of the setjmp macro shall appear
>  only in one of the following contexts: — the entire controlling
>  expression of a selection or iteration statement; — one operand of a
>  relational or equality operator with the other operand an integer
>  constant expression, with the resulting expression being the entire
>  controlling expression of a selection or iteration statement; — the
>  operand of a unary ! operator with the resulting expression being the
>  entire controlling expression of a selection or iteration statement;
>  or — the entire expression of an expression statement (possibly cast
>  to void).
> 
> 
> 

So, the only variants of using setjmp are the following:

```
if (setjmp(buf))
while (setjmp(buf))
for (;; setjmp(buf))

if (setjmp(buf) == 0)
while (setjmp(buf) == 0)
for (;; setjmp(buf) == 0)

if (!setjmp(buf))
while (!setjmp(buf))
for (;; !setjmp(buf))

setjmp(buf);
(void)setjmp(buf);

```

And we can't use this statements:

```
int foo = setjmp(buf);
foo = setjmp(buf);

```

Right? What they mean by the iteration statement? The last statement of the for loop?