Use o botão abaixo para reportar erros ou dar sugestões.

Computação Científica - Um Livro Colaborativo

11.1 Macros


São diretivas do pré-processamento que permitem substituir porções de código antes da compilação. As instruções do pré-processamento são seguidas do operador #.

  • #define cod exp substitui o cod por verb.
  • #include <cod.h> inclui o código da biblioteca cod.h. Essa sintaxe vale para as biliotecas padrão.
  • #include "home/fulano/aula/cod.h" inclui o código da biblioteca cod.h. Essa sintaxe vale para bibliotecas próprias salva com o nome cod.h na pasta home/fulano/aula/.

Exemplo 11.1.1. Implemente uma biblioteca com uma função que troca x e y.

Salvamos um arquivo com nome lib.h com as seguintes linhas:

//lib.h  
void troca(double *a,double *b)  
{  
double aux;  
aux=*a;  
*a=*b;  
*b=aux;  
}

Depois, salvamos um arquivo com o nome teste.c com as linhas:

#include <stdio.h>  
#include <stdlib.h>  
 
#include "lib.h"  
 
#define Mult(x,y) (x)*(y)  
 
void main (int argc,char **argv)  
{  
  if (argc!=3)  
  {  
    printf("Digite dois números\n");  
    return;  
  }  
  double x=atof(argv[1]);  
  double y=atof(argv[2]);  
  printf("x=%f, y=%f,  xy=%f\n",x,y,Mult(x,y));  
  troca(&x,&y);  
  printf("x=%f, y=%f,  xy=%f\n",x,y,Mult(x,y));  
}

Exemplo 11.1.2. Várias implementações da função mínimos entre dois números.

Primeiro implementamos um a biblioteca com três tipos de função mínimo:

//salva como lib.h  
double Min1(double a,double b)  
{  
if (a<b) return a;  
else return b;  
}  
 
void Min2(double *a,double b)  
{  
if (b<*a) *a=b;  
}  
 
double Min3(double a,double b)  
{  
return a<b?a:b;  
}

Depois, implementamos um código que inclui a primeira biblioteca:

#include <stdio.h>  
#include <stdlib.h>  
 
#include "lib.h"  
 
#define Min4(a,b) ((a)<(b))?(a):(b)  
 
void main (int argc,char **argv)  
{  
  double x=2,y=3;  
  printf("Min1(%f,%f)=%f\n",x,y,Min1(x,y));  
  printf("Min3(%f,%f)=%f\n",x,y,Min3(x,y));  
  printf("Min4(%f,%f)=%f\n",x,y,Min4(x,y));  
  Min2(&x,y);  
  printf("Min4=%f\n",x);  
}

Observe a funcionamento da linha return a<b?a:b; na função Min3. Essa é uma forma de escrever a condição

if (a<b) return a;  
else return b;

A expressão a<b?a:b devolve o valor do teste: Se (a<b) devolve a, senão devolve b. O macro #define Min4(a,b) ((a)<(b))?(a):(b) também calcula o mínimo entre a e b. Um macro está escrito em uma única linha que inicia com #. Se a expressão for muito grande e você precisar de duas linhas, use o operador continuidade \:

#define Min4(a,b) ((a)<(b))?\  
                        (a):\  
                        (b)

Creative Commons License Este texto é disponibilizado nos termos da licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada (CC-BY-SA 3.0). Página gerada em 19/8/2020 às 17:33:16.

Informe erros ou edite você mesmo!