Buscar

No exemplo anterior, o código da esquerda irá substituir a expressão str(Teste!\n) pela string “Teste!\n”. Já o código da direita irá substit...

No exemplo anterior, o código da esquerda irá substituir a expressão str(Teste!\n) pela string “Teste!\n”. Já o código da direita irá substituir a expressão concatena(print,f) pela concatenação dos parâmetros, ou seja, o comando printf. APAGANDO UMA DEFINIÇÃO: #UNDEF Por fim, temos a diretiva #undef, que possui a seguinte forma geral: #undef nome da macro Basicamente, essa diretiva é utilizada sempre que desejarmos apagar a definição da macro nome da macro da tabela interna que guarda as ma- cros. Em outras palavras, remove a definição de uma macro para que ela possa ser redefinida. Enquanto a diretiva #define cria a definição de uma macro, a diretiva #undef remove a definição da macro para que ela não seja mais usada ou para que possa ser redefinida. #include #include #define va lo r 10 int main ( ) { p r i n t f ( ‘ ‘ Va lor = %d\n ’ ’ , va l o r ) ; #undef va l o r # de f ine va lo r 20 p r i n t f ( ‘ ‘ Novo va lor = %d\n ’ ’ , va l o r ) ; system ( ‘ ‘ pause ’ ’ ) ; return 0; } 12.1.3 DIRETIVAS DE INCLUSÃO CONDICIONAL O pré-processador da linguagem C também possui estruturas condicio- nais: são as diretivas de inclusão condicional. Elas permitem incluir ou descartar parte do código de um programa sempre que uma determinada condição é satisfeita. DIRETIVAS #IFDEF E #IFNDEF Comecemos pelas diretivas #ifdef e #ifndef. Essas diretivas permitem verificar se uma determinada macro foi previamente definida (#ifdef) ou não (#ifndef). A sua forma geral é: #ifdef nome do sı́mbolo código #endif e #ifndef nome do sı́mbolo código #endif Abaixo é possı́vel ver um exemplo para as diretivas #ifdef e #ifndef Exemplo: usando as diretivas #ifdef e #ifndef com #ifdef com #ifndef #include #include #define TAMANHO 100 int main ( ) { # i f d e f TAMANHO i n t ve to r [TAMANHO] ; # end i f system ( ‘ ‘ pause ’ ’ ) ; return 0; } #include #include i n t main ( ) { # i f n d e f TAMANHO # def ine TAMANHO 100 i n t ve to r [TAMANHO] ; # end i f system ( ‘ ‘ pause ’ ’ ) ; return 0; } No exemplo anterior, o código da esquerda irá verificar com a diretiva #if- def se a macro TAMANHO foi definida. Como ela foi, o programa irá criar um array de inteiros com TAMANHO elementos. Já o código da direita não possui a macro TAMANHO definida. Por isso usamos a diretiva #ifndef para verificar se a macro TAMANHO NÃO foi definida. Como ela NÃO foi, o programa irá executar a diretiva #define para definir a macro TAMA- NHO para somente em seguida criar um array de inteiros com TAMANHO elementos. A diretiva #endif serve para indicar o fim de uma diretiva de inclusão condicional do tipo #ifdef, #ifndef e #if. DIRETIVAS #IF, #ELSE E #ELIF As diretivas #if, #else e #elif são utilizadas para especificar algumas condições a serem cumpridas para que uma determinada parte do código seja compi- lado. As diretivas #if e #else são equivalentes aos comandos condicionais if e else. A forma geral dessas diretivas é #if condição sequência de comandos #else sequência de comandos #endif A diretiva #else é opcional quando usamos a diretiva #if. Exatamente como o comando else é opcional no uso do comando if. Já a diretiva #elif serve para criar um aninhamento de diretivas #if. Ela é utilizada sempre que desejamos usar novamente a diretiva #if dentro de uma diretiva #else. A forma geral dessa diretiva é #if condição1 sequência de comandos #elif condição2 sequência de comandos #else sequência de comandos #endif Como no caso da diretiva #else, a diretiva #elif também é opcional quando usamos a diretiva #if. Como a diretiva #elif testa um nova condição, ela também pode ser seguida pela diretiva #else ou outra #elif, ambas opcionais. Abaixo é possı́vel ver um exemplo do uso das diretivas #if, #else e #elif: Exemplo: usando as diretivas diretivas #if, #else e #elif #include #include #define TAMANHO 55 # i f TAMANHO > 100 #undef TAMANHO #define TAMANHO 100 # e l i f TAMANHO < 50 #undef TAMANHO #define TAMANHO 50 #else #undef TAMANHO #define TAMANHO 75 #endif i n t main ( ) { p r i n t f ( ‘ ‘ Va lor de TAMANHO = %d\n ’ ’ ,TAMANHO) ; system ( ‘ ‘ pause ’ ’ ) ; return 0; } Para entender o exemplo anterior, imagine que a diretiva #define possa ser reescrita atribuindo diferentes valores para a macro TAMANHO. Se TAMANHO for maior do que 100, a diretiva #if será executada e um novo valor para TAMANHO será definido (100). Caso contrário, a condição da diretiva #elif será testada. Nesse caso, se TAMANHO for menor do que 50, a sequência de comandos da diretiva #elif será executada e um novo valor para TAMANHO será definido (50). Se a condição da diretiva #elif também for falsa, a sequência de comandos da diretiva #else será executada e um novo valor para TAMANHO será definido (75). As diretivas #if e #elif só podem ser utilizadas para avaliar expressões constantes. Como o código ainda não foi compilado, as diretivas #if e #elif não irão resolver expressões matemáticas dentro da condição. Irão apenas fazer comparações de valores já definidos, ou seja, constantes. 12.1.4 CONTROLE DE LINHA: #LINE Sempre que ocorre um erro durante a compilação de um programa, o com- pilador mostra a mensagem relativa ao erro que ocorreu. Além dessa men- sagem, o compilador também exibe o nome do arquivo onde o erro ocorreu e em qual linha desse arquivo. Isso facilita a busca de onde o erro se en- contra no nosso programa. A diretiva #line, cuja forma geral é #line numero da linha nome do arquivo permite controlar o número da linha (numero da linha) e o nome do ar- quivo (nome do arquivo) onde o erro ocorreu. O parâmetro nome do arquivo é opcional e se não for definido o compilador usará o próprio nome do ar- quivo. Veja o exemplo abaixo: Exemplo: diretiva #line #include #include i n t main ( ) { # l i n e 5 ‘ ‘ Erro de a t r i b u i c a o ’ ’ f l o a t a=; p r i n t f ( ‘ ‘ Va lor de a = %f \n ’ ’ , a ) ; p r i n t f ( ‘ ‘ PI = %f \n ’ ’ , PI ) ; system ( ‘ ‘ pause ’ ’ ) ; return 0; } Nesse exemplo, declaramos a diretiva #line logo acima a declaração de uma variável. Note que existe um erro de atribuição na variável a (linha 6). Durante o processo de compilação, o compilador irá acusar um erro, porém, ao invés de afirmar que o erro se encontra na linha 6, ele irá informar que

Ainda não temos respostas

Você sabe responder essa pergunta?

Crie uma conta e ajude outras pessoas compartilhando seu conhecimento!


✏️ Responder

SetasNegritoItálicoSublinhadoTachadoCitaçãoCódigoLista numeradaLista com marcadoresSubscritoSobrescritoDiminuir recuoAumentar recuoCor da fonteCor de fundoAlinhamentoLimparInserir linkImagemFórmula

Para escrever sua resposta aqui, entre ou crie uma conta

User badge image

Outros materiais