Seebs said:
Yes.
I'd also point out: While they may not have *error* macros that begin
with an E followed by a digit or uppercase letter and which then contain
underscores... They may have OTHER macros that do, and they're allowed
to. 7.26.2, though it is obviously referring in this case to the EFOO
convention, does not actually state that such macros are reserved only
if they are macros which expand to an integer constant intended to be
stored in errno to reflect some possible error condition.
I think you mean 7.26.3, which says:
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.
So if you don't have a #include <errno.h> (directly or indirectly),
you're still theoretically safe in using identifiers starting with
'E' -- though it's still a bad idea.
7.26p1 does say:
The following names are grouped under individual headers for
convenience. All external names described beloware reserved no
matter what headers are included by the program.
but I don't think macro names are considered "external names".
I find things like:
E_BAD_ARGUMENT
EX_DATAERR
E_SYSTEM_ERROR
ERR_NUM
EX_USAGE
ERROR_DISK_FULL
ERR_BOOTSEQ_FAIL
EAI_FAIL
In all, the headers on the first system I tried define more than 600
macros with names which start with a capital E followed by a digit or
capital letter. (And about 20 which follow it with an underscore, which
*isn't* reserved!)
Which means, for example, that an implementation that makes
E_BAD_ARGUMENT visible to a program that doesn't include <errno.h>
is non-conforming.