В чем смысл этого предупреждения о шине и что я могу делать неправильно?

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

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) - это сигнатура параметра.

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

Другие вопросы по тегам