O que é compilação condicional?
Na programação de computadores, a compilação condicional descreve a capacidade de um compilador de software ou processador de código-fonte incluir ou ignorar determinados comandos ou blocos de código com base em instruções específicas do idioma que não fazem parte tecnicamente da especificação principal da linguagem de programação. Os comandos usados para acionar a compilação condicional em um programa geralmente são chamados de diretivas de pré-processador, embora também possam ser conhecidos como diretivas de compilador, comentários condicionais ou definições condicionais. Dependendo do compilador ou idioma utilizado, as diretivas condicionais podem ser variáveis ou macros definidas pelo usuário ou também podem ser variáveis de sistema definidas pelo compilador ou pelo sistema operacional. A compilação condicional é freqüentemente usada para configurar um único conjunto de arquivos de código-fonte, para que possam ser compilados em diferentes ambientes ou sistemas operacionais sem precisar trocar ou alterar os arquivos de origem.
As definições condicionais usadas para testar a compilação condicional podem variar de um idioma para outro, mas geralmente são macros ou outras expressões de metadados fora do escopo das variáveis normais do programa. Em idiomas como C, as variáveis geralmente são macros que são lidas por um pré-processador. Na maioria das vezes, as macros não são acessíveis pelo código-fonte do programa executável real, mesmo que existam nos mesmos arquivos de origem.
As diretivas usadas para testar as variáveis condicionais definidas são rudimentares e seguem a mesma lógica que uma instrução if-then. Os testes básicos que podem ser executados para compilação condicional são se um valor é definido, não definido ou, em alguns casos, se duas variáveis definidas são equivalentes. As variáveis ou macros em si geralmente não possuem nenhum valor de significância, porque o ato de defini-las é o que as diretivas estão verificando. Com alguns idiomas e compiladores, no entanto, o valor de uma variável definida pode importar se eles forem avaliados para o estado booleano.
Quando um compilador encontra diretivas usadas para compilação condicional, as diretivas são avaliadas para verificar se são testadas como verdadeiras ou falsas. Se verdadeiro, o código que está seguindo a diretiva é compilado normalmente; caso contrário, o compilador ignorará completamente o código contido na diretiva. Isso é diferente das instruções lógicas condicionais no próprio código do programa executável porque, mesmo que a lógica possua um bloco de código que não possa ser executado, ela ainda será interpretada e compilada na maioria dos casos. Com diretivas condicionais de pré-processador, o código ignorado nunca é incluído, interpretado ou compilado. Deve-se notar também que, uma vez que o pré-processador tenha avaliado todas as variáveis e diretivas condicionais, eles não serão compilados com o restante do programa, porque se destinam apenas a fornecer orientação ao compilador.
A compilação condicional geralmente é usada para incluir ou excluir código específico para um sistema operacional ou ambiente específico. Isso significa que as bibliotecas existentes em um sistema operacional podem ser incluídas condicionalmente se as diretivas determinarem que o programa está sendo compilado nesse sistema operacional. Como alternativa, as diretivas também podem ser usadas para incluir ou excluir código com base em variáveis definidas pelo usuário. Isso pode ser feito para que o código de depuração ou criação de perfil não seja incluído na versão final de um programa ou que determinados recursos possam ser ativados ou desativados sem a necessidade de manter cópias separadas do código.