Aula 16Aulas teóricas - notas...Aula 14Aula 15

Aula 15



                     ----------------------------
                     #define com e sem parâmetros
                     ----------------------------

Exemplos:
 

----------------------------------------
   - máximo entre 2 elementos

   #define MAXIMO(A,B) A>B?A:B

   ....

       t = MAXIMO(x*y,z+1);  ==>  x*y>z+1?x*y:z+1



----------------------------------------
   - troca 2 elementos do tipo T   (int, double, etc, etc)
     em vez de {int t;t=a;a=b;b=t;}

     escrevemos troca(int,a,b)

     #define troca(T,A,B)  ...


----------------------------------------
   - letra maiúscula?

     #define MAIUSC(C) (C>='A' && C<='Z')

     int c;
     if(MAIUSC(c+2)) blablabla;
     else
       blebleble;
       
----------------------------------------

algum perigo...  
     #define VAL 2+5
     x = VAL*VAL;
     printf("%d\n",x);


Comparação entre funções e macros...











                         -------------------
                         main com parâmetros
                         -------------------

Experimentemos...

    int main(int np, char *par[]){
      int i;
      for(i=0;i<np;i++)
        printf("par %d = %s\n",i,par[i]);
      return 0;
    }



a.out ... *  ...


Nomes tradicionais: np: argc, par: argv



Utilidade:
  uma calculadora
  ler e escrever ficheiros (cp ... ...)


Nota.
Conversão de strings para inteiros 

     sscanf(s,"...",...)
            \________^
               --->  

  e vice-versa
     sprintf(s,"...",...)
             ^_______/
               <---

Em ambos os casos - como também em scanf, fscanf, printf e fprintf - o
valor retornado é o número de valores efectivamente lidos ou escritos.



Exercício
---------
  Escreva uma calculadora com as operações +, -, *, / que funciona da
  forma indicada

      calc 12 + 100
      112

  - switch é útil
  - erros: argc errado, 
           sscanf dá 0, operação errada...



PC/PI - página reservada - versão 2005.02.08

Aula 16Aulas teóricas - notas...Aula 14Aula 15