Sobre diretivas de pré-processador

A maior parte do pré-processamento é controlada por diretivas de pré-processador. As diretivas são especificadas no código-fonte criando uma linha comentada que começa com a seqüência do caractere //#, imediatamente seguida pela diretiva. Por exemplo, //#ifdef.

Como a linguagem XML, as diretivas de pré-processador devem ser formadas corretamente. Ou seja, devem ter uma diretiva de início e uma de fim. Por exemplo, quando um bloco inicia com uma das diretivas //#if, ele deve ser encerrado com uma diretiva //#endif. Os blocos podem ser aninhados, o que significa que dentro de um bloco if/elif/else/endif pode haver qualquer número de blocos if/elif/else/endif adicionais.

As diretivas definem ações e condições. O pré-processador decide se os comentários devem ser inseridos ou removidos no bloco de código. Os símbolos em expressões de diretiva podem ser definidos ou não definidos. Os identificadores e as variáveis, entretanto, devem sempre conter um valor que possa ser usado ou comparado durante o pré-processamento. O pré-processador oferece suporte a três tipos de variáveis: strings, inteiros e valores booleanos.

Os nomes de variáveis devem começar com caracteres/tokens que sejam os mesmos caracteres/tokens iniciais de identificadores Java válidos, mas, além disso, os caracteres consecutivos também podem ser '.' '\' e '/'. . É possível comparar tipos de variáveis diferentes usando sintaxe de comparação comum (<=, <, >=, > e ==). Você também pode usar operações booleanas como &&, ||, ! e ^. As funções <nome da variável>:defined ou defined(<nome da variável>) também podem ser usadas para verificar as definições de variável. Isso não é necessário e não deve ser usado ao criar novos blocos de código mas é incorporado para importações fáceis do J2ME Polish. Para obter mais informações, consulte Comparando variáveis do pré-processador.

O exemplo a seguir mostra o bloco If/Else com uma diretiva elif aninhada.

//#if mmedia 
   //#if nokia
        //#if s60_ver=="1.0"
        import com.nokia.mmapi.v1
        //#elif s60_ver=="2.0" 
        import com.nokia.mmapi.v2
       //#else
       import com.nokia.mmapi.def
       //#endif
  //#else
      import javax.microedition.mmapi
  //#endif
//#endif 
  • O NetBeans IDE dá suporte a todas as diretivas do pré-processador Antenna , portanto, você pode migrar projetos do Antenna para o NetBeans IDE e manter seu código do pré-processador.
  • Sintaxe da diretiva

    Consulte a tabela a seguir para obter uma descrição das diretivas do pré-processador.

    Diretiva
    Descrição
    #ifdef [identificador] O identificador representa uma variável de qualquer tipo (booleano, string ou inteiro) e verifica se a variável está definida. Se for verdadeiro (se a variável estiver definida), o código a seguir é processado. Os blocos aninhados também são processados. Se for falso (a variável não está definida), o código a seguir é comentado e os blocos aninhados não são avaliados. A diretiva deve ser encerrada com #endif.
    #ifndef [identificador] Funciona da mesma maneira que ifdef, mas retorna "True" se a variável não estiver definida. A diretiva deve ser encerrada com #endif.
    #elifdef [identificador] Funciona como uma instrução else if padrão, mas verifica automaticamente se o identificador está definido. A diretiva só pode complementar blocos internos iniciados por ifdef/ifndef.
    #elifndef [identificador] Funciona como uma instrução else if padrão, mas verifica automaticamente se o identificador não está definido. A diretiva só pode complementar blocos internos iniciados por ifdef/ifndef.
    #if [expressão] Avalia uma expressão passada e dispara a ação apropriada. A diretiva deve ser encerrada com endif.
    #elif [expressão] Funciona como uma instrução else if padrão e pode complementar somente os blocos iniciados por uma instrução an if. A diretiva pré-processa o código a seguir com base no resultado da expressão.
    #else Funciona como uma instrução else padrão. Somente pré-processa o código a seguir quando nenhuma das condições anteriores no bloco de definição for verdadeira. Complementa qualquer bloco interno iniciado com a diretiva if/ifdef/ifndef.
    #endif Esta diretiva deve ser usada para encerrar qualquer bloco iniciado com if/ifdef/ifndef.
    #condition [expressão] Deve estar na primeira linha de uma fila. Esta diretiva determina se o arquivo deve ser incluído na compilação com base no resultado da expressão.
    #debug [nível] Determina se a linha após a diretiva deve ter comentários inseridos ou removidos com base no nível de depuração definido na página de compilação das propriedades do projeto. Se o nível de depuração for omitido e não for definido como "Desligado" nas propriedades do projeto, o pré-processador irá automaticamente depurar a linha em questão. Utilizada com fins de depuração em expressões como System.out.println, por exemplo. Esta diretiva pode ser aninhada.
    #mdebug [nível] Tem o mesmo comportamento que #debug, mas em vez de inserir ou remover comentários de um bloco inteiro de linhas após a linha fica ativa até alcançar #enddebug. Esta diretiva é utilizada com fins de depuração em expressões como System.out.println, por exemplo. Esta diretiva pode ser aninhada. Se o bloco mdebug fizer uma interseção parcial em um bloco if/ifdef/ifndef (por exemplo, enddebug estiver fora de um bloco if encerrado no qual mdebug é chamado) o pré-processador irá gerar erros.
    #enddebug Deve encerrar o bloco #mdebug.
    #define [identificador] #define [identificador=valor] #define [valor do identificador] Adiciona habilidades ou variáveis temporárias à memória do pré-processador. Não pode ser usada em blocos aninhados. As variáveis globais definidas nas propriedades de configuração do projeto substituem essas variáveis temporárias.
    #undefine [identificador] Remove as habilidades/variáveis temporárias da memória. Esta declaração também pode ser usada para remover variáveis globais definidas nas propriedades de configuração do projeto da memória do pré-processador, mas não removerá as variáveis da lista de variáveis de configuração ou do projeto.
    Consulte também
    Sobre configurações de projeto
    Sobre habilidades
    Sobre o pré-processamento
    Trabalhando com configurações de projeto
    Gerenciando blocos de pré-processador
    Sintaxe de comparação em diretivas de pré-processador

    Notificações legais