Issue 1066: Duplicate macro definitions with variadic macros

Authors: Joseph Myers
Date: 2026-05-21
Submitted against: C23
Status: Open

C23 6.10.5.1 (Macro replacement) says:

Likewise, an identifier currently defined as a function-like macro shall not be redefined by another #define preprocessing directive unless the second definition is a function-like macro definition that has the same number and spelling of parameters, and the two replacement lists are identical.

This fails to say explicitly that both definitions must be variadic or both must not be variadic.

#define F(x)
#define F(x, ...)

By contrast, for compatibility of function types, 6.7.7.4 says "the parameter type lists shall agree in the number of parameters and in use of the final ellipsis".

Suggested correction

In C23 6.10.5.1 (Macro replacement), insert text as follows.

Likewise, an identifier currently defined as a function-like macro shall not be redefined by another #define preprocessing directive unless the second definition is a function-like macro definition that has the same number and spelling of parameters, the two definitions agree in use of the final ellipsis, and the two replacement lists are identical.