*   >> Leitura Educação Artigos >> science >> programação

Introdução à Macros em C

Quase todo mundo já definida uma constante em C usando #define CONST 12345

mas apenas um pequeno grupo realmente sabe o que essa linha faz e como explorar esses recursos. Cada linha que começa com um # não é processado pelo compilador C, mas pelo processador pré C que analisa estas linhas e produz o código que efetivamente vão ser compilado. Em gcc, você pode ver o resultado da fase de pré-processamento usando gcc -E src.cWhat o definir

directiva faz é fazer o pré-processador substituir todas as ocorrências da definição pelo texto que se segue.

A substituição é puramente textual e existem alguns truques que são realmente incríveis. Eu vou falar sobre dois deles: macros de função-like e de multi linha macros.Function-like macrosTo fazer uma função macro-like basta colocar o parêntese de costume após o nome da macro e siga o nome de seus argumentos. Os argumentos serão substituídos pela seqüência exata que você passar para o macro.

Um exemplo rápido #define print_int (x) printf ("Int% d \\ n", X); Quando chamado print_int (30), a macro irá expandir toprintf ("Int% d \\ n", 30); Multiline macrosA várias linhas macro podem ser construídos colocando um \\ no fim de toda a linha da macro. Este personagem indicam que a macro continua na linha seguinte. SWAP #define (a, b) {\\ a ^ = b; \\ B ^ = A; \\ A ^ = b; \\} O parêntese são necessários porque esse bloco precisa ser avaliado como uma única instrução.

Sem ele, o seguinte seria um fracasso:

if (a> b) SWAP (a, b) Macros são dangerousMacros produz erros que são difíceis de depurar e difícil de patch. Os possíveis armadilhas são muitos (erros na precedência de operadores, macros de auto-referência, etc.). Esta página foram todos eles muito bem documentado. Esta foi uma pequena introdução a um uso mais avançado de macros C. O pré-processador é um recurso poderoso e pode ser usado para fazer um monte de coisas boas. Para saber mais sobre ele pode-se visitar este site.



Copyright © 2008 - 2016 Leitura Educação Artigos,https://artigos.nmjjxx.com All rights reserved.