Pasar literal de matriz como argumento macro

Esto me ha estado molestando durante algún tiempo, por ejemplo, si estoy tratando de escribir este código:

// find the length of an array
#define ARRAY_LENGTH(arr) (sizeof(arr)/sizeof(int))   
// declare an array together with a variable containing the array's length
#define ARRAY(name, arr) int name[] = arr; size_t name##_length = ARRAY_LENGTH(name);

int main() {
    ARRAY(myarr, {1, 2, 3});
}

El código da este error:

<stdin>:8:31: error: macro "ARRAY" passed 4 arguments, but takes just 2

Porque veARRAY(myarr, {1, 2, 3}); como pasarARRAY el argumentomyarr, {1, 2 y3}. ¿Hay alguna manera de pasar unaarray literal a macros?

EDIT: en algunas de las macros más complejas que necesitaba, es posible que también necesite pasar dos o más matrices a la macro, por lo que la macro variable no funciona.

Respuestas a la pregunta(1)

Su respuesta a la pregunta