¿Cuál es el significado de esta advertencia férula y lo que podría estar haciendo mal?

StackOverflow https://stackoverflow.com/questions/3655566

  •  01-10-2019
  •  | 
  •  

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.

¿Fue útil?

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.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top