|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
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>. |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
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 |
|
![]() |
| Outils de la discussion | |
|
|