C - Arquivos de cabeçalho
Um arquivo de cabeçalho é um arquivo com extensão .h que contém declarações de função C e definições de macro a serem compartilhadas entre vários arquivos de origem. Existem dois tipos de arquivos de cabeçalho:os arquivos que o programador escreve e os arquivos que vêm com seu compilador.
Você solicita o uso de um arquivo de cabeçalho em seu programa incluindo-o com a diretiva de pré-processamento C #include , como você viu a inclusão de stdio.h arquivo de cabeçalho, que vem junto com seu compilador.
Incluir um arquivo de cabeçalho é igual a copiar o conteúdo do arquivo de cabeçalho, mas não o fazemos porque será propenso a erros e não é uma boa ideia copiar o conteúdo de um arquivo de cabeçalho nos arquivos de origem, especialmente se ter vários arquivos de origem em um programa.
Uma prática simples em programas C ou C++ é manter todas as constantes, macros, variáveis globais do sistema e protótipos de função nos arquivos de cabeçalho e incluir esse arquivo de cabeçalho onde for necessário.
Incluir sintaxe
Os arquivos de cabeçalho do usuário e do sistema são incluídos usando a diretiva de pré-processamento #include . Tem as seguintes duas formas -
#include <file>
Este formulário é usado para arquivos de cabeçalho do sistema. Ele procura um arquivo chamado 'arquivo' em uma lista padrão de diretórios do sistema. Você pode anexar diretórios a esta lista com a opção -I ao compilar seu código-fonte.
#include "file"
Este formulário é usado para arquivos de cabeçalho de seu próprio programa. Ele procura um arquivo chamado 'arquivo' no diretório que contém o arquivo atual. Você pode anexar diretórios a esta lista com a opção -I ao compilar seu código-fonte.
Incluir operação
O #include A diretiva funciona direcionando o pré-processador C para verificar o arquivo especificado como entrada antes de continuar com o restante do arquivo de origem atual. A saída do pré-processador contém a saída já gerada, seguida pela saída resultante do arquivo incluído, seguida pela saída que vem do texto após o #include diretiva. Por exemplo, se você tiver um arquivo de cabeçalho header.h como segue −
char *test (void);
e um programa principal chamado program.c que usa o arquivo de cabeçalho, assim -
int x; #include "header.h" int main (void) { puts (test ()); }
o compilador verá o mesmo fluxo de token que veria se program.c fosse lido.
int x; char *test (void); int main (void) { puts (test ()); }
Cabeçalhos únicos
Se um arquivo de cabeçalho for incluído duas vezes, o compilador processará seu conteúdo duas vezes e resultará em um erro. A maneira padrão de evitar isso é incluir todo o conteúdo real do arquivo em uma condicional, como esta −
#ifndef HEADER_FILE #define HEADER_FILE the entire header file file #endif
Essa construção é comumente conhecida como wrapper #ifndef . Quando o cabeçalho for incluído novamente, a condicional será falsa, pois HEADER_FILE está definido. O pré-processador ignorará todo o conteúdo do arquivo e o compilador não o verá duas vezes.
Inclui computados
Às vezes é necessário selecionar um dos vários arquivos de cabeçalho diferentes a serem incluídos em seu programa. Por exemplo, eles podem especificar parâmetros de configuração a serem usados em diferentes tipos de sistemas operacionais. Você pode fazer isso com uma série de condicionais da seguinte forma -
#if SYSTEM_1 # include "system_1.h" #elif SYSTEM_2 # include "system_2.h" #elif SYSTEM_3 ... #endif
Mas à medida que cresce, torna-se tedioso, em vez disso, o pré-processador oferece a capacidade de usar uma macro para o nome do cabeçalho. Isso é chamado de inclusão calculada . Em vez de escrever um nome de cabeçalho como argumento direto de #include , você simplesmente coloca um nome de macro lá -
#define SYSTEM_H "system_1.h" ... #include SYSTEM_H
SYSTEM_H será expandido e o pré-processador procurará system_1.h como se o #include tinha sido escrito dessa forma originalmente. SYSTEM_H pode ser definido pelo seu Makefile com uma opção -D.
Linguagem C