Qual è il senso di questo avviso stecca e che cosa potrei fare male?
Domanda
Questa è la riga di codice:
bool cpfs_utimens(struct Cpfs *, char const *path, struct timespec const[2]);
stecca 3.1.2 esecuzione genera questo avviso:
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)
Naming il parametro non fa alcuna differenza.
Soluzione
Ciò significa che quando si dichiara il parametro struct timespec const[2]
, il 2
tra il [
e ]
non è necessaria. Cambiare il codice per:
bool cpfs_utimens(struct Cpfs *, char const *path, struct timespec const[]);
In C / C ++, non si può chiedere per una serie di una certa dimensione come parametro, perché la matrice è trattato come un puntatore e puntatori non hanno le dimensioni.
Altri suggerimenti
C99 (poiché si utilizza bool
) si ha la possibilità di richiedere una lunghezza minima di una matrice di parametri aggiungendo static
simili
bool cpfs_utimens(struct Cpfs *, char const *path, struct timespec const[static 2]);
la firma (se c'è una cosa del genere in C) è ancora quella di un parametro pointer, pensò.
(e anche io non so di qualsiasi compilatore esistente che fa qualcosa di sensato da queste informazioni, ancora.)