[PATCH] MAX.3, MIN.3: New page (and link page) to document MAX() and MIN()

Paul Eggert eggert@cs.ucla.edu
Wed May 12 21:17:54 GMT 2021


On 5/12/21 1:43 PM, Alejandro Colomar via Libc-alpha wrote:

> +If any of the arguments is of a floating-point type,

"any" -> "either"

> +these macros shouldn't be used

That's too strong. It's often OK to use MAX and MIN on floating point 
arguments.

> +The arguments may be evaluated more than once,
> +and their types might be promoted to a common type
> +if both arguments aren't of the same type.

This is muddy. It should state clearly that even if A and B are both 
integers, MAX (a, b) might not return their maximum. For example, on a 
typical C platform today, MAX (-1, 2147483648) returns 4294967295 and 
MIN (-1, 2147483648) returns 2147483648.

Also, the man page shouldn't require the arguments to be evaluated at 
least once. It's possible to implement MAX so that it sometimes doesn't 
evaluate one argument, and the documentation shouldn't preclude such an 
implementation.

The man page should more specifically mention that although MIN and MAX 
are defined <sys/param.h> on GNU platforms, other platforms define them 
elsewhere or not at all.

> +These macros return the value of one of their arguments,

Unfortunately they don't necessarily do that, as shown in the MAX 
example above.

I suggest looking at the remarks about MAX and MIN that are made here, 
and incorporating the useful parts of these remarks into the man page:

https://git.savannah.gnu.org/cgit/gnulib.git/tree/lib/minmax.h







More information about the Libc-alpha mailing list