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 753 Tempos em 476 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. The Following User Says Thank You to jssuser For This Useful Post:

    Não registrado (1 )

+ 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