Behaviour of this preprocessor directive is the same for both C and C++ compilers.
Behaviour of this directive is very likely to vary from one compiler vendor to another.
Purpose
The #pragma
directive allows implementation specific control of the compiler.
Format
#pragma command
All preprocessor directives begin with the #
symbol. It must be the first character on the line or the first character on the line following optional white space.
Some early compilers flagged an error if #
was not the first character on the line.
Spaces or tabs are permitted between the #
and pragma
, but not escape characters or other symbols or macros. The preprocessor removes white space and concatenates the #
and pragma
together.
If anything follows the #pragma
directive (other than white space) then the program is malformed.
The following are valid uses:
#pragma pack(2) # pragma once # /* comments are white space */ pragma long_calls
The following are invalid uses:
// #\ is not a valid preprocessor directive # \t pragma pack(2) // #" is not a valid preprocessor directive # "" pragma once
Use
All #pragma
commands are compiler specific, so you need to consult your compiler documentation for details.
If the #pragma command
is not recognized, the preprocessor ignores it.
Pragmas are used to pass information to the compiler that cannot be done through the language.
A common use of pragmas is to specify the packing / alignment of data. Normally, a compiler will align data on the processor’s natural boundary (which is usually the same as the processor’s bit size). However, for structures with byte defined data, 8-bit alignment may be required. The following shows byte alignment packing using Microsoft C/C++:
#pragma pack(push) /* save the current packing value */ #pragma pack(1) /* pack on a 1 byte boundary */ struct some_type_with_8_bit_alignment { char a; short b; long c; char d; }; #pragma pack(pop) /* restore the saved packing value */
Please consider sharing this article if you liked it or found it useful.
You may use one of the buttons below or share using your own favourite media.
Please do not republish this article on your website. You may publish a short excerpt and provide a link back to the original article.