В чем смысл этого предупреждения о шине и что я могу делать неправильно? - PullRequest
2 голосов
/ 07 сентября 2010

Это строка кода:

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

Запуск шины 3.1.2 создает это предупреждение:

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)

Именование параметра не имеет значения.

Ответы [ 2 ]

5 голосов
/ 07 сентября 2010

Это означает, что при объявлении параметра struct timespec const[2], 2 между [ и ] не требуется.Изменение вашего кода на:

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

В C / C ++ вы не можете запросить массив определенного размера в качестве параметра, поскольку массив обрабатывается как указатель, а указатели не имеют размеров.

2 голосов
/ 07 сентября 2010

В C99 (поскольку вы используете bool), у вас есть возможность требовать минимальную длину массива параметров, добавив static, например,

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

Подпись (если такая вещь есть в C) все еще подпись параметра указателя, подумалось.

(А также я не знаю ни одного существующего компилятора, который пока делает что-нибудь разумное из этой информации.)

...