2010-09-07 12 views
2

Ceci est la ligne de code:Quelle est la signification de cet avertissement d'attelle et que pourrais-je faire de mal?

bool cpfs_utimens(struct Cpfs *, char const *path, struct timespec const[2]); 

attelle 3.1.2 Exécution génère cet avertissement:

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) 

Nommer le paramètre ne fait aucune différence.

Répondre

5

Cela signifie que lorsque vous déclarez le paramètre struct timespec const[2], le 2 entre le [ et ] n'est pas nécessaire. Changer votre code:

bool cpfs_utimens(struct Cpfs *, char const *path, struct timespec const[]); 

en C/C++, vous ne pouvez pas demander un tableau d'une certaine taille comme paramètre, car le tableau est traité comme un pointeur et pointeurs n'ont pas la taille.

+0

Je ne sais pas si tatillonne est la apostrophes chose faite sur le SO, mais vous dire probablement " pointeurs ", comme dans le pluriel de pointeur, pas" pointeur ", comme dans quelque chose appartenant au pointeur. Avoir un upmod de toute façon. –

+0

Cela ne semble pas juste. J'ai toujours eu l'impression que les tableaux de taille fixe sont effectivement passés en valeur. Un point de désordre: C n'est pas C++. –

+1

non, tout tableau est passé en tant que pointeur vers sa première entrée. –

2

En C99 en ajoutant static comme celui-ci

bool cpfs_utimens(struct Cpfs *, char const *path, struct timespec const[static 2]); 

la signature (s'il y a une telle chose en C) (puisque vous utilisez bool) vous avez la possibilité d'exiger une longueur minimale d'un tableau de paramètres est encore celui d'un paramètre de pointeur, la pensée.

(Et je ne connais pas de compilateur existant qui fait quelque chose de sensé à partir de cette information, encore.)

+0

Utile, je me demande si quelqu'un utilise ou implémente ceci. –

+0

@Matt Joiner: au moins 'gcc' implémente la partie syntaxique ;-) le vrai test pour cela est difficile à implémenter, j'imagine. Vous devez soit gérer une sorte d'invariant ('est plus grand que ') sur les pointeurs, soit vous limiter strictement aux objets de la bonne taille. –