遵循Linux open_by_handle_at
()的文档:
http://man7.org/linux/man-pages/man2/open_by_handle_at.2.html
我写这个C文件:
#define _GNU_SOURCE
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
typedef void (*foobar) (struct file_handle *);
但它会发出不祥的警告:
>gcc -c foobar.c
warning: ‘struct file_handle’ declared inside parameter list
如果我在其间添加不相关的声明:
#define _GNU_SOURCE
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
struct file_handle *junk;
typedef void (*foobar) (struct file_handle *);
然后它会在没有警告的情况下编译。为什么警告??
答案 0 :(得分:0)
您尚未提前声明struct file_handle
。编译器第一次在上面的函数定义中看到struct file_handle
。在每种情况下,struct file_handle
的声明都具有块范围,即它对应于相应函数的本地。
在功能之前添加以下结构。
struct file_handle {
unsigned int handle_bytes; /* Size of f_handle [in, out] */
int handle_type; /* Handle type [out] */
unsigned char f_handle[0]; /* File identifier (sized by
caller) [out] */
};
高级语言允许您将声明/定义放在任何地方(例如C ++或Python),但不幸的是,C是从上到下编译的