Is #pragma once a safe include guard?

c++, include-guards, pragma

Solution

Using `#pragma once` should work on any modern compiler, but I don't see any reason not to use a standard `#ifndef` include guard. It works just fine. The one caveat is that GCC didn't support `#pragma once` before version 3.4.

I also found that, at least on GCC, it recognizes the standard `#ifndef` include guard and optimizes it, so it shouldn't be much slower than `#pragma once`.

Problem

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?

Original source

Related problems