2.5 Alternatives to Wrapper #ifndef

CPP supports two more ways of indicating that a header file should be read only once. Neither one is as portable as a wrapper #ifndef and we recommend you do not use them in new programs, with the caveat that #import is standard practice in Objective-C.

CPP supports a variant of #include called #import which includes a file, but does so at most once. If you use #import instead of #include, then you don't need the conditionals inside the header file to prevent multiple inclusion of the contents. #import is standard in Objective-C, but is considered a deprecated extension in C and C++.

#import is not a well designed feature. It requires the users of a header file to know that it should only be included once. It is much better for the header file's implementor to write the file so that users don't need to know this. Using a wrapper #ifndef accomplishes this goal.

In the present implementation, a single use of #import will prevent the file from ever being read again, by either #import or #include. You should not rely on this; do not use both #import and #include to refer to the same header file.

Another way to prevent a header file from being included more than once is with the #pragma once directive. If #pragma once is seen when scanning a header file, that file will never be read again, no matter what.

#pragma once does not have the problems that #import does, but it is not recognized by all preprocessors, so you cannot rely on it in a portable program.