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.