以下爲Linux open_by_handle_at
()的文檔:爲什麼我必須聲明一個不相關的struct file_handle變量才能使用該類型?
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 *);
然後編譯沒有警告。爲什麼警告?
您可能希望有一個看看[奇怪的編譯器警告C:警告:在參數列表中聲明'結構'](http://stackoverflow.com/questions/16831605/strange-compiler-warning-c-warning-struct-declared-inside-parameter-list #16831856)。 – halfbit
@halfbit根據我引用的文檔,頭文件應該有聲明 –
就像一個註釋:我無法在運行openSUSE 13.2的Linux機器上重現您的警告。該定義似乎通過'#include'包括'/ usr/src/include/bits/fcntl.h'包含'/ usr/src/include/bits/fcntl-linux.h',後者包含第311行的結構定義(在'_ifdef __USE_GNU'中應該由'_GNU_SOURCE'產生)。 –
halfbit