I'm looking at the #include guards in various .h files in /usr/include.
There seem to be different (comment) idioms present at the bottom of
those files/#include guards.


For example:

ctype.h:
#endif /* !_CTYPE_H_ */

float.h:
#endif  /* _FLOAT_H_ */

err.h:
#endif /* !_ERR_H_ */

curses.h:
#endif /* _CURSES_H_ */


Is there agreement on what notation is correct?


It seems to me that both are defensible or at least arguable.  The
straightforward idiom without the ! works simply as a reminder of
which file/#define the #endif belongs to.  The version with the !
seems to me to be intended to also take note of the fact that it says
#ifndef at the top, with emphasis on the n.

>From running commands such as
$ grep '#endif /\* _' *.h | wc -l
and
$ grep '#endif /\* !_' *.h | wc -l
it would appear the former is about twice as common.


Should a single style be adopted?


style(9) doesn't cover this admittedly less-than-crucial point.
Speaking of include guards, is #pragma once ever okay here, or is that
a big no-no?

Thanks and regards,
Ian

(Ian Ropers)

Reply via email to