Possible Duplicate:
#pragma - help understanding
I saw the pragma
many times,but always confused, anyone knows what it does?Is it windows only?
Possible Duplicate:
#pragma - help understanding
I saw the pragma
many times,but always confused, anyone knows what it does?Is it windows only?
It's used to replace the following preprocessor code:
#ifndef _MYHEADER_H_
#define _MYHEADER_H_
...
#endif
A good convention is adding both to support legacy compilers (which is rare though):
#pragma once
#ifndef _MYHEADER_H_
#define _MYHEADER_H_
...
#endif
So if #pragma once
fails the old method will still work.
I see some people in the comment section advocate for using guards instead of #pragma once
.
This makes little to no sense in 2023 and beyond unless you are targeting some special compiler that you know does not support #pragma once
.
Today's best practice is to use only #pragma once
and don't bother with guards at all. Reasons being
#pragma
allows the compiler to use its internal caches which is of course faster than using the pre-processor which will always include the contents of your file just to later stumble on your guards and dismiss the whole thing.In the C and C++ programming languages, #pragma once is a non-standard but widely supported preprocessor directive designed to cause the current source file to be included only once in a single compilation. Thus, #pragma once serves the same purpose as #include guards, but with several advantages, including: less code, avoiding name clashes, and improved compile speed.
See the Wikipedia article for further details.
Generally, the #pragma
directives are intended for implementing compiler-specific preprocessor instructions. They are not standardized, so you shouldn't rely on them too heavily.
In this case, #pragma once
's purpose is to replace the include guards that you use in header files to avoid multiple inclusion. It works a little faster on the compilers that support it, so it may reduce the compilation time on large projects with a lot of header files that are #include
'ed frequently.
pragma is a directive to the preprocessor. It is usually used to provide some additional control during the compilation. For example do not include the same header file code. There is a lot of different directives. The answer depends on what follows the pragma word.