В чем смысл этого преобразования шины и что я мог бы сделать неправильно?
Вопрос
Это линия кода:
bool cpfs_utimens(struct Cpfs *, char const *path, struct timespec const[2]);
Запуск Splint 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)
Наименование параметра не имеет значения.
Решение
Это означает, что когда вы объявляете параметр struct timespec const[2]
, то 2
между [
а также ]
не требуется. Изменение вашего кода на:
bool cpfs_utimens(struct Cpfs *, char const *path, struct timespec const[]);
В C / C ++ вы не можете просить массив определенного размера в качестве параметра, поскольку массив обрабатывается как указатель, а указатели не имеют размеров.
Другие советы
В C99 (так как вы используете bool
) У вас есть возможность требует минимальной длины массива параметров, добавив static
так
bool cpfs_utimens(struct Cpfs *, char const *path, struct timespec const[static 2]);
Подпись (если есть такая вещь в C), все еще является точным параметром указателя, мысли.
(А также я не знаю ни одного существующего компилятора, который делает что-то разумное из этой информации.)