Eu tenho visto um código como este geralmente no início dos arquivos de cabeçalho:
#ifndef HEADERFILE_H
#define HEADERFILE_H
E no final do arquivo é
#endif
Qual é o propósito disso?
#pragmaé: ele ativa um recurso específico do compilador. Embora #pragma onceseja muito amplamente apoiada, é fora do padrão.
info cppou veja aqui ) diz "ela não é reconhecida por todos os pré-processadores, portanto você não pode confiar nela em um programa portátil". E o GNU cpp otimiza o #ifndefidioma comum e portátil, tornando-o tão eficiente quanto #pragma once.
#ifndef HEADERFILE_Hpode violar o namespace da implementação do nome do cabeçalho que acontece com o início E; os identificadores que começam com Ee um dígito ou letra maiúscula são reservados para <errno.h>. Eu sugiro #ifndef H_HEADERFILE.