¿Cuál es el significado de esta advertencia férula y lo que podría estar haciendo mal?
Pregunta
Esta es la línea de código:
bool cpfs_utimens(struct Cpfs *, char const *path, struct timespec const[2]);
Running férula 3.1.2 genera esta advertencia:
cpfs.h:21:74: Function parameter times declared as manifest array (size
constant is meaningless)
A formal parameter is declared as an array with size. The size of the array
is ignored in this context, since the array formal parameter is treated as a
pointer. (Use -fixedformalarray to inhibit warning)
Denominación del parámetro no hace ninguna diferencia.
Solución
Esto significa que cuando se declara la struct timespec const[2]
parámetro, no se requiere la 2
entre el [
y ]
. Cómo cambiar el código a:
bool cpfs_utimens(struct Cpfs *, char const *path, struct timespec const[]);
En C / C ++, no se puede pedir una variedad de cierto tamaño como parámetro, ya que la matriz es tratado como un puntero y punteros no tienen tamaños.
Otros consejos
En C99 (ya que utiliza bool
) tiene la posibilidad de requerir una longitud mínima de una matriz de parámetros mediante la adición de static
como este
bool cpfs_utimens(struct Cpfs *, char const *path, struct timespec const[static 2]);
la firma (si hay tal cosa en C) sigue siendo el de un parámetro de puntero, pensó.
(y también no sé de cualquier compilador existente que hace algo sensato partir de esa información, sin embargo.)