Why won't sys/stat.h define ino_t with -std=c1x?
我正在编写一些C代码的奇怪问题。 请考虑以下代码:
1 2 | #include <sys/stat.h> ino_t inode; |
根据POSIX.1-2008,头文件
The
header shall define the blkcnt_t ,blksize_t ,dev_t ,ino_t ,mode_t ,nlink_t ,uid_t ,gid_t ,off_t , andtime_t types as described in.
当我尝试在Linux系统上的文件test.c中的位置上编译源代码时会发生这种情况:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ cat test.c #include <sys/stat.h> ino_t inode; $ uname -srm Linux 3.8.0-26-generic x86_64 $ lsb_release -d Description: Ubuntu 13.04 $ gcc -c test.c $ gcc -std=c90 test.c test.c:2:1: error: unknown type name 'ino_t' $ gcc -std=c99 test.c test.c:2:1: error: unknown type name 'ino_t' $ gcc -std=c1x test.c test.c:2:1: error: unknown type name 'ino_t' |
当我指定任何-std选项时,为什么
我的
手册页也说包含
根据
__STRICT_ANSI__
ISO Standard C. This macro is implicitly defined by gcc(1) when
invoked with, for example, the-std=c99 or-ansi flag.
我想这意味着任何XOPEN功能也都会被关闭。然而,我无法找到任何描述。
附:似乎R ..(见下文)认为这也在
请注意这个答案的要点如下:
Thou shall include all include files mentioned in a manual page and not try to reverse engineer which ones may not be needed.
如果您使用
1 2 3 | $ cc -std=c11 -fsyntax-only test.c ; echo $? test.c:2:1: error: unknown type name ‘ino_t’; did you mean ‘__ino_t’? 1 |
但
1 2 | $ cc -std=gnu11 -fsyntax-only test.c ; echo $? 0 |
许多人不能正确理解
在
Trigraph在
在
如果你是从头开始编写一个新的C程序,我建议你使用