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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top