Partilhar via


Macros (C/C++)

O pré-processador expande macros em todas as linhas, exceto diretivas de pré-processador, linhas que têm um # como o primeiro caractere de espaço não branco. Ele expande macros em partes de algumas diretivas que não são ignoradas como parte de uma compilação condicional. Diretivas de compilação condicional permitem suprimir a compilação de partes de um arquivo de origem. Elas testam uma expressão ou identificador constante para determinar quais blocos de texto devem ser passados para o compilador e quais devem ser removidos do arquivo de origem durante o pré-processamento.

A política #define normalmente é usada para associar identificadores significativos a constantes, palavras-chave e instruções ou expressões de uso geral. Os identificadores que representam constantes às vezes são chamados de constantes simbólicas ou constantes de manifesto. Os identificadores que representam instruções ou expressões são chamados de macros. Nesta documentação de pré-processador, somente o termo “macro” é usado.

Quando o nome de uma macro é reconhecido no texto de origem do programa ou nos argumentos de alguns outros comandos de pré-processador, ele é tratado como uma chamada para aquela macro. O nome da macro é substituído por uma cópia do corpo da macro. Se a macro aceitar argumentos, os argumentos reais após o nome da macro serão substituídos por parâmetros formais no corpo da macro. O processo de substituição de uma chamada de macro pela cópia processada do corpo é chamado de expansão da chamada de macro.

Em termos práticos, há dois tipos de macros. Macros do tipo objeto não levam argumentos. Macros semelhantes a funções podem ser definidas para aceitar argumentos, para que pareçam e ajam como chamadas de função. Como as macros não geram chamadas de função reais, às vezes você pode fazer com que os programas sejam executados mais rapidamente substituindo as chamadas de função por macros. (No C++, as funções embutidas geralmente são um método preferencial). No entanto, as macros podem criar problemas se você não defini-las e usá-las com cuidado. Você pode precisar usar parênteses em definições de macro com argumentos para preservar a precedência apropriada em uma expressão. Além disso, as macros podem não manipular corretamente expressões com efeitos colaterais. Para obter mais informações, consulte o exemplo getrandom em A Diretiva #define.

Depois que você tiver definido uma macro, não poderá redefini-la como um valor diferente sem descartar primeiro a definição original. No entanto, você pode redefinir a macro com exatamente a mesma definição. Assim, a mesma definição pode aparecer mais de uma vez em um programa.

A diretiva #undef remove a definição de uma macro. Depois que tiver removido a definição, você poderá redefinir a macro com um valor diferente. A diretiva #define e A diretiva #undef discutem as diretivas #define e #undef, respectivamente.

Para obter mais informações, consulte

Confira também

Referência de pré-processador C/C++