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`<?`b`-
is the
*minimum*, returning the smaller of the numeric values`a`and`b`; `a`>?`b`-
is 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. A GNU C extension allows you to write safe
macros that avoid this kind of problem (see section Naming an Expression's Type). 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.

[Contents] [Back] [Prev] [Up] [Next] [Forward]