Obra: Programar em C/Pré-processador
Matéria: Português
pré processador pré processador um programa que examina programa fonte escrito em executa certas modificações nele baseado nas diretivas de compilação ou diretivas do pré processador as diretivas de compilação são comandos que não são compilados sendo dirigidos ao pré processador executado pelo compilador antes da execução do processo de compilação propriamente dito portanto pré processador modifica programa fonte que ainda não estaria pronto para ser entregue ao compilador todas as diretivas de compilação são iniciadas pelo caractere sharp as diretivas podem ser colocadas em qualquer parte do programa mas não podem ser colocadas na mesma linha que outra diretiva ou instrução as principais diretivas de compilação são include define undef ifdef ifndef if else elif endif diretivas de compilação include diretiva include diz ao pré processador para incluir naquele ponto um arquivo especificado sua sintaxe include nome_do_arquivo ou include diferença entre se usar somente ordem de procura nos diretórios pelo arquivo especificado se você quiser informar nome do arquivo com caminho completo ou se arquivo estiver no diretório de trabalho use arquivo se arquivo estiver nos caminhos de procura pré especificados do compilador isto se ele for um arquivo do próprio sistema como caso de arquivos como stdio string etc use define diretiva define tem duas utilidades uma delas apenas definir um símbolo que pode ser testado mais tarde outra definir uma constante ou ainda uma macro com parâmetros as três maneiras de usar diretiva são define nome_do_símbolo define define nome_da_macro parâmetros toda vez que pré processador encontrar no código ser compilado ele deve substituí lo por toda vez que pré processador encontrar nome_da_macro parâmetros ele deve substituir por também substituindo os parâmetros encontrados na expressão de substituição funciona mais ou menos como uma função veja exemplo para entender melhor exemplo include define pi define versao int main printf programa versão versao printf numero pi vale pi return exemplo define max define min max será substituída pela linha ou seja atribuiremos maior valor entre ou quando você utiliza diretiva define nunca deve haver espaços em branco no identificador nome da macro por exemplo macro define print printf não funcionará corretamente porque existe um espaço em branco entre print undef diretiva undef tem seguinte forma geral undef nome_da_macro ela faz com que macro que segue seja apagada da tabela interna que guarda as macros compilador passa partir deste ponto não conhecer mais esta macro ifdef ifndef pré processador também tem estruturas condicionais no entanto como as diretivas são processadas antes de tudo só podemos usar como condições expressões que envolvam constantes símbolos do pré processador estrutura ifdef mais simples delas ifdef nome_do_símbolo código endif código entre as duas diretivas só será compilado se símbolo ou constante nome_do_símbolo já tiver sido definido há também estrutura ifndef que
pilado se símbolo ou constante nome_do_símbolo já tiver sido definido há também estrutura ifndef que executa código se símbolo não tiver sido definido lembre que símbolo deve ter sido definido através da diretiva define if diretiva if tem seguinte forma geral if expressão código endif sequência de declarações será compilada apenas se expressão fornecida for verdadeira muito importante ressaltar que expressão fornecida não pode conter nenhuma variável apenas valores constantes símbolos do pré processador else diretiva else funciona como na estrutura de bloco if condição else if expressão ou ifndef expressão código será executado se expressão for verdadeira else código será executado se expressão for falsa endif um exemplo define windows código ifdef windows define cabecalho windows_io else define cabecalho unix_io endif include cabecalho elif diretiva elif serve para implementar uma estrutura do tipo if condição else if condição sua forma geral if expressão_ código elif expressão_ código elif expressão_ código elif expressão_n código endif podemos também misturar diretivas elif com else obviamente só devemos usar uma diretiva else ela deve ser última antes de endif usos comuns das diretivas um uso muito comum das diretivas de compilação em arquivos cabeçalho que só precisam devem ser incluídos uma vez muitas vezes incluímos indiretamente um arquivo várias vezes pois muitos cabeçalhos dependem de outros cabeçalhos para evitar problemas costuma se envolver arquivo inteiro com um bloco condicional que só será compilado se arquivo já não tiver incluído para isso usamos um símbolo baseado no nome do arquivo por exemplo se nosso arquivo se chama cabecalho comum usar um símbolo com nome cabecalho_h ifndef cabecalho_h define cabecalho_h endif se arquivo ainda não tiver sido incluído ao chegar na primeira linha do arquivo pré processador não encontrará símbolo cabecalho_h continuará ler arquivo que lhe fará definir símbolo se tentarmos incluir novamente arquivo pré processador pulará todo conteúdo pois símbolo já foi definido concatenação pré processador oferece duas possibilidades para manipular uma cadeia de caracteres primeira usando operador que permite substituir grafia de um parâmetro include int main void mad equivale mad define string mad mad printf string estou aqui segunda usando operador que serve para concatenar vários parâmetros ex ban ana igual banana include int main void int teste define concat igual tes te printf concat tes te