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

Computação Científica - Um Livro Colaborativo

11.2 Compilação condicional


Quando não queremos compilar um pedaço de código, podemos usar a opção comentar // ou /* */. Mas as vezes, queremos mais de uma versão do código, compilando pedaços segundo uma condição que escolhemos. Usamos a sintaxe

#if condicao_1  
  instrucao_1  
#elif condicao_2  
  instrucao_2  
#else  
  instrucao_padrao  
#endif

Exemplo 11.2.1. Faça um programa com dois main(), um curto para fazer DEBUG e outro longo com um código que some n números.

#include <stdio.h>  
#include <stdlib.h>  
 
#define DEBUG 1  
 
#if (DEBUG==1)  
void main (int argc,char **argv)  
{  
  double soma=0;  
  int i;  
  for (i=1;i<argc;i++) soma+=atof(argv[i]);  
  printf("A soma é =%f\n",soma);  
}  
 
#else  
void main (int argc,char **argv)  
{  
  printf("Entrou com %d números\n ",argc-1);  
}  
#endif

Também podemos usar as diretivas #ifdef, #ifndef e #undef para escolher um pedaço de código na compilação. A diretiva #ifdef verifica se um determinado símbolo está definido, #ifndef verifica que um determinado símbolo não está definido e #undef retira a definição de um símbolo.

Exemplo 11.2.2. Faça um programa que soma n números de duas formas:

  • Se ligar a condição linha de comando, os números são lidos da linha de comando.
  • senão, os números são lidos da tela com scanf.
#include <stdio.h>  
#include <stdlib.h>  
 
//#define DEBUG  
 
#ifdef DEBUG  
void main (int argc,char **argv)  
{  
#endif  
#ifndef DEBUG  
void main (void)  
{  
#endif  
  double soma=0;  
  int i;  
#ifndef DEBUG  
  int n;  
  printf("Digite quantos números você vai somar\n");  
  scanf("%d",&n);  
  float v[n];  
  printf("Digite os números\n");  
  for (i=0;i<n;i++) scanf("%f",&v[i]);  
  double argc=n+1;  
#endif  
#ifdef DEBUG  
  float v[argc-1];  
  for (i=0;i<argc-1;i++) v[i]=atof(argv[i+1]);  
#endif  
  for (i=0;i<argc-1;i++) soma+=v[i];  
  printf("A soma é =%f\n",soma);  
}

O operador defined() pode ser usado no teste da compilação condicional: #ifdef DEBUG é o mesmo que #if defined(DEBUG). É possível trabalhar com mais de um símbolo, por exemplo, #if defined(DEBUG1) && !defined(DEBUG2), que compila quando DEBUG1 e DEBUG2 não está.

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!