I've read that there is some compiler optimization when using #pragma once
which can result in faster compilation. I recognize that is non-standard, and thus could pose a cross-platform compatibility issue.
Is this something that is supported by most modern compilers on non-windows platforms (gcc)?
I want to avoid platform compilation issues, but also want to avoid the extra work of fallback guards:
#pragma once
#ifndef HEADER_H
#define HEADER_H
...
#endif // HEADER_H
Should I be concerned? Should I expend any further mental energy on this?
If we use msvc or Qt (up to Qt 4.5), since GCC(up to 3.4) , msvc both support
#pragma once
, I can see no reason for not using#pragma once
.Source file name usually same equal class name, and we know, sometime we need refactor, to rename class name, then we had to change the
#include XXXX
also, so I think manual maintain the#include xxxxx
is not a smart work. even with Visual Assist X extension, maintain the "xxxx" is not a necessary work.I wish
#pragma once
(or something like it) had been in the standard. Include guards aren't a real big deal (but they do seem to be a little difficult to explain to people learning the language), but it seems like a minor annoyance that could have been avoided.In fact, since 99.98% of the time, the
#pragma once
behavior is the desired behavior, it would have been nice if preventing multiple inclusion of a header was automatically handled by the compiler, with a#pragma
or something to allow double including.But we have what we have (except that you might not have
#pragma once
).