这个夹板警告的含义是什么?我可能做错了什么?

时间:2010-09-07 03:31:18

标签: c linux gcc splint

这是代码行:

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)

命名参数没有区别。

2 个答案:

答案 0 :(得分:5)

这意味着当您声明参数struct timespec const[2]时,2[之间的]不是必需的。将代码更改为:

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

在C / C ++中,你不能要求一个特定大小的数组作为参数,因为数组被视为指针而指针没有大小。

答案 1 :(得分:2)

在C99中(因为您使用bool),您可以通过添加static这样的参数数组来获得最小长度

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

签名(如果在C中有这样的东西)仍然是一个指针参数的思想。

(而且我也不知道任何现有的编译器能从这些信息中做出明智的事情。)