X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f X-Recipient: djgpp AT delorie DOT com Message-ID: <55727FED.7060509@iki.fi> Date: Sat, 06 Jun 2015 08:06:53 +0300 From: "Andris Pavenis (andris DOT pavenis AT iki DOT fi)" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: djgpp AT delorie DOT com Subject: Re: __STRICT_ANSI__ and errno.h definitions [WAS: Re: DJGPP v2.05: some thoughts] References: <55673F0B DOT 1090103 AT iki DOT fi> <83twuwwshg DOT fsf AT gnu DOT org> <55675040 DOT 9030008 AT iki DOT fi> <556F6E49 DOT 8010006 AT gmx DOT de> <556FCCDF DOT 7080005 AT iki DOT fi> <83bngvr0ef DOT fsf AT gnu DOT org> <557078B1 DOT 9040004 AT iki DOT fi> <201506041613 DOT t54GDT8m014488 AT delorie DOT com> <5570B1F7 DOT 1070509 AT iki DOT fi> <83pp5aprqw DOT fsf AT gnu DOT org> <834mmmp7f0 DOT fsf AT gnu DOT org> <83zj4enfns DOT fsf AT gnu DOT org> In-Reply-To: <83zj4enfns.fsf@gnu.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from Quoted-Printable to 8bit by delorie.com id t56570gp002346 Reply-To: djgpp AT delorie DOT com On 06/05/2015 10:01 PM, Eli Zaretskii (eliz AT gnu DOT org) wrote: >> From: Nick Bowler >> Date: Fri, 5 Jun 2015 18:10:01 +0000 (UTC) >> >> On Fri, 05 Jun 2015 17:16:19 +0300, Eli Zaretskii (eliz AT gnu DOT org) wrote: >>>> From: Martin Str|mberg >>>> Date: Fri, 5 Jun 2015 12:29:43 +0000 (UTC) >>>> >>>> But, IIRC, C99 (or even perhaps C89) reserved any symbol starting with E. >>> Where do you see such language in C99? I don't see it, and neither do >>> I see it in C11. But maybe I'm missing something, it's not like I've >>> read the entire document top to bottom. >> Names starting with E followed by a digit or an uppercase letter are >> reserved if is included. > I don't see this text in the standard. > >> C99ยง7.5p4 Errors : >> >> Additional macro definitions, beginning with E and a digit or E and >> an uppercase letter, may also be specified by the implementation. >> >> This text was copied unchanged into C11. I am quite sure it was also >> present in C89. > It's indeed present in C89, but I don't see how it reserves these > names. > > > It says that implementation may specify additional macro definitions according to these restrictions (begins with E and followed by either digit or capital letter) and that should not be considered as standard violation. From other side also not adding additional definitions is OK according to standard as far as I understand. So current DJGPP implementation does not violate standard. We are however free add these macros even when __STRICT_ANSI__ is defined. Tried for MINGW ( Konsole outpu gcc version 5.1.0 20150422 (Fedora MinGW 5.1.0-1.fc22) (GCC)): Konsole output [andris AT ap usr]$ echo "#include " | i686-w64-mingw32-gcc -x c -std=c89 - -E -dD | egrep --color=never '^#define\ E' #define EPERM 1 #define ENOENT 2 #define ENOFILE ENOENT #define ESRCH 3 #define EINTR 4 #define EIO 5 #define ENXIO 6 #define E2BIG 7 #define ENOEXEC 8 #define EBADF 9 #define ECHILD 10 #define EAGAIN 11 ...... One is also getting the same behavior for Linux ( Konsole outpugggg gcc version 5.1.1 20150422 (Red Hat 5.1.1-1) (GCC)) ): Konsole output [andris AT ap usr]$ echo "#include " | gcc -x c -std=c89 - -E -dD | egrep --color=never '^#define\ E' #define EPERM 1 #define ENOENT 2 #define ESRCH 3 #define EINTR 4 #define EIO 5 #define ENXIO 6 #define E2BIG 7 #define ENOEXEC 8 #define EBADF 9 #define ECHILD 10 #define EAGAIN 11 ....... For DJGPP we're getting: Konsole output [andris AT ap usr]$ echo "#include " | i586-pc-msdosdjgpp-gcc -x c -std=c89 - -E -dD | egrep --color=never '^#define\ E' #define EDOM 1 #define ERANGE 2 [andris AT ap usr]$ echo "#include " | i586-pc-msdosdjgpp-gcc -x c -std=c11 - -E -dD | egrep --color=never '^#define\ E' #define EDOM 1 #define ERANGE 2 #define EILSEQ 41 Konsole output [andris AT ap usr]$ echo "#include " | i586-pc-msdosdjgpp-gcc -x c -std=c1x - -E -dD | egrep --color=never '^#define\ E' #define EDOM 1 #define ERANGE 2 #define EILSEQ 41 As the result I would vote for removal of excluding additional macros when __STRICT_ANSI__ is defined. Andris PS: Renaming subject as thread is becoming too long