| GNU Compiler Collection (GCC) | www.imodulo.com · 2003-11-10 | ||
| [ Software | Documentation | Contact ] |
It is very convenient to have operators which return the "minimum" or the "maximum" of two arguments. In GNU C++ (but not in GNU C),
a <? bis the minimum, returning the smaller of the numeric values a and b;
a >? bis the maximum, returning the larger of the numeric values a and b.
These operations are not primitive in ordinary C++, since you can use a macro to return the minimum of two things in C++, as in the following example.
#define MIN(X,Y) ((X) < (Y) ? : (X) : (Y))
You might then use int min = MIN (i, j); to set min to the minimum value of variables i and j.
However, side effects in X or Y may cause unintended behavior. For example, MIN (i++, j++) will fail, incrementing the smaller counter twice. The GNU C typeof extension allows you to write safe macros that avoid this kind of problem (Typeof). However, writing MIN and MAX as macros also forces you to use function-call notation for a fundamental arithmetic operation. Using GNU C++ extensions, you can write int min = i <? j; instead.
Since <? and >? are built into the compiler, they properly handle expressions with side-effects; int min = i++ <? j++; works correctly.
| © Free Software Foundation, Inc. |