Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17


#pragma once?

Posted on 2006-07-07
Medium Priority
Last Modified: 2010-08-05
can anyone tell me why is the #pragma once used so many times in header files? what does it tell the compiler exactly? what happens if i dont use it?
Question by:yattias
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
LVL 48

Expert Comment

ID: 17061347
#pragma once prevents header file to be included more than once to the same source file. In old projects the same was done using:
#ifndef <some unique string>
#define <some unique string>

all h-file contents goes here


In complicated project with multiple include files there are always cases when the same h-file is included more than once. For example:

// B.h
#include "A.h"

// C.h
#include "A.h"

// D.cpp
#include "B.h"
#include "C.h"

A.h is included twice. #pragma once prevents compilation error (duplicate declaration).
LVL 15

Expert Comment

ID: 17061370
Specifies that the header file will be included (opened) only once by the compiler when compiling a source code(.cpp) file.This can reduce build times as the compiler will not open and read the file after the first #include of the module.

If you don't use it everytime you compile .cpp, compiler will open the included .h files to check for the definitions otherwise it would open only if the .h file changes.

LVL 30

Expert Comment

ID: 17062030
I recommend using header guards over #pragma once, because header guards are portable, and can be used with any compiler, where as the pragma once method only works with VC++ compiler.

//.... header content


Author Comment

ID: 17065432
thanks! but I don't see why would the compiler include a header file more than once and I don't see how I would get a compile error if I don't use #pragma.  any help?
LVL 48

Accepted Solution

AlexFM earned 500 total points
ID: 17065461
// B.h
#include "A.h"

// C.h
#include "A.h"

// D.cpp
#include "B.h"
#include "C.h"

A.h is included twice to D.cpp. For every type which is defined in A.h you will get compilation error without #pragma once.

Featured Post

Enroll in September's Course of the Month

This month’s featured course covers 16 hours of training in installation, management, and deployment of VMware vSphere virtualization environments. It's free for Premium Members, Team Accounts, and Qualified Experts!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The following diagram presents a diamond class hierarchy: As depicted, diamond inheritance denotes when two classes (e.g., CDerived1 and CDerived2), separately extending a common base class (e.g., CBase), are sub classed simultaneously by a fourt…
In Easy String Encryption Using CryptoAPI in C++ ( I described how to encrypt text and recommended that the encrypted text be stored as a series of hexadecimal digits -- because cyphertext may…
This course is ideal for IT System Administrators working with VMware vSphere and its associated products in their company infrastructure. This course teaches you how to install and maintain this virtualization technology to store data, prevent vuln…
Add bar graphs to Access queries using Unicode block characters. Graphs appear on every record in the color you want. Give life to numbers. Hopes this gives you ideas on visualizing your data in new ways ~ Create a calculated field in a query: …
Suggested Courses

722 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question