Next: Functions Up: ANSI C for Programmers Previous: Exercises 1

Contractions

C veterans use abbreviated forms for expressions. Some are natural and widely adopted, others merely lead to obscurity - even if they produce faster code (and often they don't) they waste future programmers' time.
• i++ is equivalent to i=i+1. This (and the i- decrementing operator) is a common contraction. The operation can be done after the variable is used, or (by using -i, ++i) before, so
```...
i = 4;
printf("i = %d\n", i++)
```
and
```...
i = 4;
printf("i = %d\n", ++i)
```
will both leave i as 5, but in the 1st fragment 4 will be printed out while in the 2nd 5 will.

• i+=6 is equivalent to i=i+6. This style of contraction isn't so common, but can be used with most of the binary operators.

• Assignment statements have a value - the final value of the left-hand-side - so j = (i=3+4) will set i then j to 7, and i = j = k = 0 will set k, then j, then i to zero. This feature should be used with caution.

• The `,' operator is used between 2 expressions if the value of the 1st expression can be ignored. It's a way to put 2 or more statements where normally only one would go. E.g.
```  for(init(3),i=0,j+0; i<100; i++,j++)
```
This feature is often over-used too.

• Expressions with comparison operators return 1 if the comparison is true, 0 if false, so while(i!=0) and while(i) are equivalent.

• The `if (cond) exp1; else exp2;' construction can be abbreviated using `(cond)?exp1:exp2'. The following fragments are equivalent.
```...
if (a==6)
j=7;
else
j=5;
...
(a==6)?j=7:j=5;
...
```

This notation should be used with discretion.

Next: Functions Up: ANSI C for Programmers Previous: Exercises 1
Tim Love
1999-10-06