This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Use of #if DEBUG in reent.h


Users can enable assertions in newlib/libc/include/sys/reent.h by
defining the macro DEBUG. As DEBUG is a relatively obvious and general
purpose name, it is also used by other projects. I've seen it used by
the Atmel Software Framework (ASF) and some TI Energia projects.  A web
search finds a few more examples:

https://forum.pjrc.com/threads/19916-reent-h-space-problems-or-just-my-pc
http://forum.arduino.cc/index.php?topic=151655.0

Actually, these are all examples of projects that have been seen to fail
to build with the following error:

> include\sys\reent.h:458:10: error: #if with no expression

This occurs when DEBUG is defined but has no value. Which seems to
happen with the following test case:

> #define DEBUG
> #include <sys/reent.h>

Notably, I don't see an error if I remove the #define and instead pass
-DDEBUG (with no value) to my gcc build [msp430-elf-gcc (GCC) 7.0.0
20161220].

My initial reaction to seeing the error message was that this was a bug
in reent.h, which should use #ifdef DEBUG instead. Unfortunately if you
do that then "#define DEBUG 0" and -DDEBUG=0 result in debug being
turned on, which seems undesirable. This leads me to believe that the
use of #if DEBUG is deliberate and not considered a bug?

I mention this here because I couldn't find any previous discussion of
it on this list, and as it has been discussed elsewhere I think there's
value in having a definitive statement about it here.

Again for the record, I'll ask whether "#if DEBUG" could be changed to
"#if _SYS_REENT_H_DEBUG", or similar? That would avoid the error and the
naming conflict.  I'm assuming that the examples listed above aren't
trying to turn newlib assertions on. I suspect that at the very least
DEBUG has been used for long enough that there's a stronger argument for
keeping it the same than for changing it to something else?

Thanks,

Joe Seymour


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]