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

StackOverflow https://stackoverflow.com/questions/3655566

  •  01-10-2019
  •  | 
  •  

Вопрос

Это линия кода:

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), все еще является точным параметром указателя, мысли.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top