I do not know for certain. It is my suspicion that the #pragma once will cause the file to be added to a table that it has already been processed, whereas the #ifndef does not necessarily preclude reparsing of the entire header, as one does not necessarily include or preclude the entire file within the confines of an #ifndef/#endif set. The #pragma once, however, seems to imply, "hey, once you read this file for this compilation unit, don't bother reading it again". I favor adding the #pragma once if I now a header would never require reparsing within a single compilation unit. I prefer to create headers that do not depend upon such reparsing activity.