Messages in this thread | | | Date | Tue, 7 Jan 2014 02:38:06 -0800 | From | Josh Triplett <> | Subject | Re: #pragma once? |
| |
On Tue, Jan 07, 2014 at 11:09:11AM +0100, Michal Marek wrote: > On 2014-01-07 10:48, Geert Uytterhoeven wrote: > > Furthermore some userspace may rely on doing #define XXX to avoid > > including a specific kernel header (yes, it's ugly). > > This pattern is also sometimes used: > $ head -6 include/linux/spinlock_up.h > #ifndef __LINUX_SPINLOCK_UP_H > #define __LINUX_SPINLOCK_UP_H > > #ifndef __LINUX_SPINLOCK_H > # error "please don't include this file directly" > #endif > > And there is nothing ugly about it.
That's debatable, but it's certainly reasonable to try to enforce non-inclusion of "internal" headers directly. However, for headers not exposed to userspace, it'd be easy to write that as:
include/linux/spinlock.h: #pragma once #define LINUX_SPINLOCK_H_INCLUDED
include/linux/spinlock_up.h: #pragma once #ifndef LINUX_SPINLOCK_H_INCLUDED #error "Only include this file via spinlock.h, never directly" #endif
> So #pragma once is probably a good > idea for most headers that are not exposed to userspace. But making it a > requirement in scripts/checkpatch.pl or Documentation/CodingStyle means > that it will become hard to defend the few legitimate uses of ifndef > guards against people who have a printed copy of checkpatch.pl under > their pillow.
Any mention in CodingStyle or check in checkpatch would need to cover the two exceptions: uapi, and headers that are intentionally parsed multiple times for preprocessor magic (TRACE_HEADER_MULTI_READ).
- Josh Triplett
| |