14.03.2015 Views

Apostila C da UFMG - Universidade do Minho

Apostila C da UFMG - Universidade do Minho

Apostila C da UFMG - Universidade do Minho

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

8 - Diretivas de compilação<br />

8.1 - As Diretivas de Compilação<br />

Diretivas de compilação são coman<strong>do</strong>s que não são compila<strong>do</strong>s. Eles são dirigi<strong>do</strong>s ao compila<strong>do</strong>r. Já vimos, e usamos<br />

muito, a diretiva #include . Sabemos que ela não gera código mas diz ao compila<strong>do</strong>r que ele deve incluir um arquivo<br />

externo na hora <strong>da</strong> compilação. As diretivas <strong>do</strong> C são identifica<strong>da</strong>s por começarem por #. As diretivas que<br />

estu<strong>da</strong>remos são defini<strong>da</strong>s pelo padrão ANSI:<br />

#if<br />

#else<br />

#ifdef<br />

#elif<br />

#define<br />

Pág. 58<br />

#ifndef<br />

#endif<br />

#undef<br />

#include<br />

Procuraremos ser breves em suas descrições. Para maiores informações aconselhamos ao aluno procurar o manual<br />

específico <strong>do</strong> compila<strong>do</strong>r que está sen<strong>do</strong> utiliza<strong>do</strong>.<br />

8.2 - A Diretiva include<br />

A diretiva #include já foi usa<strong>da</strong> durante o nosso curso diversas vezes. Ela diz ao compila<strong>do</strong>r para incluir, na hora <strong>da</strong><br />

compilação, um arquivo especifica<strong>do</strong>. Sua forma geral é:<br />

#include "nome_<strong>do</strong>_arquivo" ou<br />

#include <br />

A diferença entre se usar "" e é somente a ordem de procura nos diretórios pelo arquivo especifica<strong>do</strong>. Se você<br />

quiser informar o nome <strong>do</strong> arquivo com o camin ho completo, ou se o arquivo estiver no diretório de trabalho, use "".<br />

Se o arquivo estiver nos caminhos de procura pré-especifica<strong>do</strong>s <strong>do</strong> compila<strong>do</strong>r (como é o caso de arquivos como<br />

stdio.h) use .<br />

8.3 - As Diretivas define e undef<br />

A diretiva #define tem a seguinte forma geral:<br />

#define nome_<strong>da</strong>_macro sequência_de_caracteres<br />

Quan<strong>do</strong> você usa esta diretiva, você está dizen<strong>do</strong> ao compila<strong>do</strong>r para que, to<strong>da</strong> vez que ele encontrar o nome-<strong>da</strong>macro<br />

no programa a ser compila<strong>do</strong>, ele deve substituí-lo pela sequência de caracteres forneci<strong>da</strong>. Isto é muito útil para<br />

deixar o programa mais geral. Veja um exemplo:<br />

#include <br />

#define PI 3.1416<br />

#define VERSAO "2.02"<br />

main ()<br />

{<br />

printf ("Programa versao %s",VERSAO);<br />

printf ("O numero pi vale: %f",PI);<br />

}<br />

Se quisermos mu<strong>da</strong>r o nosso valor de PI, ou <strong>da</strong> VERSAO, no programa acima, basta mexer no início <strong>do</strong> programa.<br />

Isto torna o programa mais flexível. Há quem diga que, em um programa, nunca se deve usar constantes como 10,<br />

3.1416, etc., pois estes são números que ninguém sabe o que significam. Ao invés disto deve-se usar apenas #defines.<br />

É uma convenção na linguagem C que as macros declara<strong>da</strong>s em #defines devem ser to<strong>da</strong>s em maiúsculas. Esta é uma<br />

convenção que deve ser segui<strong>da</strong> pois torna o programa mais legível.<br />

Um outro uso <strong>da</strong> diretiva #define é o de simplesmente definir uma macro. Neste caso usa-se a seguinte forma geral:<br />

#define nome_<strong>da</strong>_macro<br />

Neste caso o objetivo não é usar a macro no programa (pois ela seria substituí<strong>da</strong> por na<strong>da</strong>), mas, sim, definir uma<br />

macro para ser usa<strong>da</strong> como uma espécie de flag. Isto quer dizer que estamos definin<strong>do</strong> um valor como sen<strong>do</strong><br />

"ver<strong>da</strong>deiro" para depois podermos testá -lo.<br />

Também é possível definir macros com argumentos. Veja o exemplo a seguir:<br />

#define max(A,B) ((A>B) ? (A):(B))<br />

#define min(A,B) ((A

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!