tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

#pragma once



[bcc tech-userlevel tech-toolchain, followups on tech-kern]

Traditionally to avoid problems with repeated inclusion of a header
file, you put #include guards around it, say in sys/dev/foo.h:

#ifndef	_SYS_DEV_FOO_H_
#define	_SYS_DEV_FOO_H_

...

#endif	/* _SYS_DEV_FOO_H_ */

With newer compilers this can be replaced by a single line in the
header file:

#pragma once

It's nonstandard, but using  #pragma once  is maybe a bit less
error-prone -- don't have to have to pollute the namespace with
have-I-been-included macros, and I've made mistakes with copying &
pasting the per-file have-I-been-included macro into the wrong file.

That said, clang has a warning these days to detect this mistake so
maybe traditional #include guards aren't that error-prone.

Thoughts on its use in NetBSD in:

(a) purely internal header files?
(b) header files exposed to potentially out-of-tree kernel modules?
(c) header files exposed to userland?

How reliable/consistent is toolchain support for it?  Is it worth
adopting or is the benefit negligible over continuing to use
traditional #include guards?  Likely problems with adopting it?


Home | Main Index | Thread Index | Old Index