E*

  • Follow


   7.26.3 Errors <errno.h> 
   Macros that begin with E and a digit or E and an uppercase letter
   may be added to the declarations in the <errno.h> header. 

May an implementation define an error macro EOF with a value different
from the EOF in <stdio.h>?

-- Richard
-- 
:wq
0
Reply richard91 (3683) 5/10/2008 9:12:28 PM

Richard Tobin <richard@cogsci.ed.ac.uk> wrote:
>    7.26.3 Errors <errno.h> 
>    Macros that begin with E and a digit or E and an uppercase letter
>    may be added to the declarations in the <errno.h> header. 
> 
> May an implementation define an error macro EOF with a value different
> from the EOF in <stdio.h>?

No.  A strictly conforming program is allowed to include both headers
and the conflicting definitions of EOF would violate the constraint in
6.10.3p2.  Since a conforming implementation is not allowed to have
entensions that invalidate strictly conforming programs, such a
definition is not allowed.

Conformance questions like this really belong in comp.std.c where
there's less traffic, much less heat, and far more light than there is
here.

-- Larry Jones

I think we need to change the rules. -- Calvin
0
Reply lawrence.jones2 (565) 5/11/2008 3:06:52 AM


On 10 May 2008 21:12:28 GMT, richard@cogsci.ed.ac.uk (Richard Tobin)
wrote in comp.lang.c:

>    7.26.3 Errors <errno.h> 
>    Macros that begin with E and a digit or E and an uppercase letter
>    may be added to the declarations in the <errno.h> header. 
> 
> May an implementation define an error macro EOF with a value different
> from the EOF in <stdio.h>?

Perhaps in a non-standard extra include file, or guarded by some
conditional compilation guard in <errno.h>.

It could not unconditionally include such a definition in <errno.h>
when the compiler is invoked in conforming mode because it would break
conforming programs that included both <stdio.h> and <errno.h>.

-- 
Jack Klein
Home: http://JK-Technology.Com
FAQs for
comp.lang.c http://c-faq.com/
comp.lang.c++ http://www.parashift.com/c++-faq-lite/
alt.comp.lang.learn.c-c++
http://www.club.cc.cmu.edu/~ajo/docs/FAQ-acllc.html
0
Reply jackklein (3932) 5/11/2008 4:01:35 AM

Richard Tobin wrote:
>    7.26.3 Errors <errno.h> 
>    Macros that begin with E and a digit or E and an uppercase letter
>    may be added to the declarations in the <errno.h> header. 
> 
> May an implementation define an error macro EOF with a value different
> from the EOF in <stdio.h>?

     No, because a conforming program can include both <stdio.h>
and <errno.h>.  Note that the freedom to add more EXXX macros
in <errno.h> does not imply that every EXXX macro everywhere
must be an error number.

     The paragraph can be read as a warning and as an implied
promise.  First, it warns you not to use EEYORE for your own
purposes, because a future <errno.h> might define it.  And
second, it implies that future <errno.h> versions will *not*
define E12MANY or EiEiO or E_IS_FOR_ELEPHANT, so you can use
those identifiers as you wish.  However, implications are not
actual promises: Witness C99's encroachment on names reserved
to the programmer in C90.

-- 
Eric Sosman
esosman@ieee-dot-org.invalid
0
Reply esosman2 (2945) 5/11/2008 1:01:36 PM

On Sun, 11 May 2008 09:01:36 -0400, Eric Sosman wrote:
> Richard Tobin wrote:
>>    7.26.3 Errors <errno.h>
>>    Macros that begin with E and a digit or E and an uppercase letter
>>    may be added to the declarations in the <errno.h> header.
> 
>      The paragraph can be read as a warning and as an implied
> promise.  First, it warns you not to use EEYORE for your own purposes,
> because a future <errno.h> might define it.  And second, it implies that
> future <errno.h> versions will *not* define E12MANY or EiEiO or
> E_IS_FOR_ELEPHANT, so you can use those identifiers as you wish. 

Why can't E12MANY be defined? It's a macro that begins with E and a digit, 
which is allowed, right? I'm asking because E2BIG is a fairly common real-
world macro provided by <errno.h>.
0
Reply truedfx (1926) 5/11/2008 1:10:09 PM

Harald van Dijk wrote:
> On Sun, 11 May 2008 09:01:36 -0400, Eric Sosman wrote:
>> Richard Tobin wrote:
>>>    7.26.3 Errors <errno.h>
>>>    Macros that begin with E and a digit or E and an uppercase letter
>>>    may be added to the declarations in the <errno.h> header.
>>      The paragraph can be read as a warning and as an implied
>> promise.  First, it warns you not to use EEYORE for your own purposes,
>> because a future <errno.h> might define it.  And second, it implies that
>> future <errno.h> versions will *not* define E12MANY or EiEiO or
>> E_IS_FOR_ELEPHANT, so you can use those identifiers as you wish. 
> 
> Why can't E12MANY be defined? It's a macro that begins with E and a digit, 
> which is allowed, right? I'm asking because E2BIG is a fairly common real-
> world macro provided by <errno.h>.

     Oops!  My blunder; sorry.

-- 
Eric Sosman
esosman@ieee-dot-org.invalid
0
Reply esosman2 (2945) 5/11/2008 1:49:09 PM

5 Replies
43 Views

(page loaded in 0.19 seconds)


Reply: