Incluindo cabeçalhos de forma segura em C

Certo dia eu estava conversando com um amigo meu sobre C e ele me falou que a coisa que ele mais odiava era ter que tomar cuidado com a ordem dos include que ele fazia quando iniciava um projeto em C. Ora, vamos pensar um pouco, se você incluir duas vezes o cabeçalho stdio.h por exemplo, em dois arquivos diferentes, e incluir os dois, não da erro certo?

O que eu quero mostrar é isso:
[arquivo1.h]
#include <stdio.h>
.
.
[arquivo2.h]
#include <stdio.h>
.
.
[main.c]
#include “arquivo1.h”
#include “arquivo2.h”
#include <stdio.h>
.
.
Claramente estamos incluindo 3 vezes o mesmo cabeçalho, como C não aceita re-declaração, isso deveria acusar um erro, porém não acusa. Cosa você esteja pensando que deve ser algo extremamente complicado, pense novamente, tudo que difere na stdio.h para os seus cabeçalhos .h é o inicio e o final. É um simples “hack” utilizando diretivas de compilação #ifndef, #define, e #endif. Siga esse modelo de cabeçalho:
[arquivo.h]
#ifndef __ARQUIVO_H
#define __ARQUIVO_H
.
.
#endif
A diretiva #ifndef checa se __ARQUIVO_H já foi definido ou não, caso não tenha sido, inclui o código até encontrar #endif, caso já tenha sido, não inclui nada até #endif. Dessa forma, contanto que __ARQUIVO_H sejá único, os problemas de redeclaração de cabeçalhos estão resolvidos.
Fica a dica.

About Zarnick

Programer, sysadmin, guitarrist, and Italian. That's what I am. Plain simple.
ANSI C, C/C++, Tips , ,