В чем смысл этого предупреждения о шине и что я могу делать неправильно?
Это строка кода:
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 ответа
Решение
Это означает, что когда вы объявляете параметр 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) - это сигнатура параметра.
(И также я не знаю ни одного существующего компилятора, который делает что-то разумное из этой информации.)