photo
+ Responder ao Tópico
Resultados de 1 a 1 de 1

Thread: Compilação Condicional (#ifdef, #ifndef, #else, #endif)

  1. #1 Fechar a publicação
    Senior Member jssuser's Avatar jssuser's Avatar
    Data de afiliação
    Aug 2018
    Postagens
    1,503
    Obrigado
    209
    Agradecimentos 1,632 Tempos em 888 Postagens
    AssinarAssinar
    subscritar: 0

    Compilação Condicional (#ifdef, #ifndef, #else, #endif)

    As diretivas do pré-processador são usadas ​​pelo do compilador para pré-processamento do código fonte antes de sua compilação. A diretiva sempre começa com o # (jogo da velha), por isso o compilador proíbe o uso deste símbolo nos nomes das variáveis, funções, etc.

    Cada diretiva é descrita por um registro separado e opera antes da mudança de linha. Não se podem utilizar várias diretivas num só registro. Se o registro da diretiva for muito grande, ele pode ser dividido em várias linhas usando a barra invertida '\', neste caso, a próxima linha é considerada uma continuação do registro da diretiva.

    As diretrizes de compilação condicional do pré-processador permitem compilar ou pular uma parte do programa dependendo do cumprimento de uma determinada condição.

    Essa condição pode assumir uma das seguintes formas.

    #ifdef identifier
    // O código aqui é compilado se o identificador já tiver sido definido para o pré-processador na diretriz #define.
    #endif

    #ifndef identifier
    // O código localizado aqui é compilado se o identificador não está definido atualmente pelo pré-processador da diretriz #define.
    #endif

    Qualquer uma das diretrizes de compilação condicional pode ser seguida por qualquer número de linhas possivelmente contendo a diretiva #else e terminando com #endif. Se a condição verificada for verdadeira, as linhas entre #else e #endif serão ignoradas. Se a condição verificada não for cumprida, todas as linhas entre a verificação e a diretiva #else (ou a diretiva #endif se a primeira estiver ausente) serão ignoradas.

    Exemplo:

    #ifndef TestMode
    #define TestMode
    #endif
    //+------------------------------------------------------------------+
    //| Função de início do programa script |
    //+------------------------------------------------------------------+
    void OnStart()
    {
    #ifdef TestMode
    Print("Test mode");
    #else
    Print("Normal mode");
    #endif
    }

    Dependendo do tipo de programa e do modo de compilação, os padrões macros são definidos da seguinte forma:

    __MQL5__ macro é definido ao compilar o arquivo *.mq5, __MQL4__ macro é definido ao compilar o *.mq4.
    _DEBUG macro é definido ao compilar o modo de depuração.
    _RELEASE macro É definido ao compilar no modo de liberação.

    Exemplo:

    //+------------------------------------------------------------------+
    //| Função de início do programa script |
    //+------------------------------------------------------------------+
    void OnStart()
    {
    #ifdef __MQL5__
    #ifdef _DEBUG
    Print("Olá do compilador MQL5 [DEBUG]");
    #else
    #ifdef _RELEASE
    Print("Olá do compilador MQL5 [RELEASE]");
    #endif
    #endif
    #else
    #ifdef __MQL4__
    #ifdef _DEBUG
    Print("Olá do compilador MQL4 [DEBUG]");
    #else
    #ifdef _RELEASE
    Print("Olá do compilador MQL4 [RELEASE]");
    #endif
    #endif
    #endif
    #endif
    }

    Though trading on financial markets involves high risk, it can still generate extra income in case you apply the right approach. By choosing a reliable broker such as InstaForex you get access to the international financial markets and open your way towards financial independence. You can sign up here.


  2. Os seguintes 2 Usuários Dizem Obrigado o a jssuser por este post útil:

    Não registrado (2 )

+ Responder ao Tópico

Permissões de postagens

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts