On 10/10/2014 02:37 PM, Chuck Forsberg WA7KGX wrote:
On 10/10/2014 07:45 AM, Jakub Jelinek wrote:
> On Fri, Oct 10, 2014 at 07:23:02AM -0700, Chuck Forsberg WA7KGX wrote:
>> Why does this program fragment fail to compile if a C standard
>> is specified? I compiles without complaint with a simple cc -c qq.c
> You chose a strict conformance mode, in which sys/stat.h doesn't provide
> those. You need either -D_XOPEN_SOURCE, -D_GNU_SOURCE, -D_DEFALT_SOURCE
> etc. feature test macros (see info libc on it), or -std=gnu11 (or
> -std=gnu99, -std=gnu89 etc.).
>
> Jakub
Where is S_IFMT et al. defined in strict conformance mode?
No where. C does not define S_IFMT, so strict conformance means
limiting yourself to the symbols defined by C, therefore attempting to
use something the standard does not call out should be an error, as you
found out.
Why not in sys/stat.h?
Because in strict conformance mode, sys/stat.h must not pollute the
environment. You usually DON'T want to compile in strict conformance
mode, if you have any likelihood of using extensions.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org