O pré-processador C é um pré-processador de macro (permite definir macros) que transforma o seu programa antes de ser compilado. Estas transformações podem ser a inclusão de arquivo de cabeçalho, expansões de macro etc.
Todas as diretivas de pré-processamento começam com um símbolo #
. Por exemplo,
#define PI 3.14
Alguns dos usos comuns do pré-processador C são:
- Incluindo Arquivos de Cabeçalho: #Incluindo
- Macros usando #define
- Exemplo 1: #define preprocessor
- Função como Macros
- Exemplo 2: Usando #define preprocessor
- Conditional Compilation
- Uses of Conditional
- Como usar o condicional?
- #ifdef Directiva
- #if, #elif e #else Directiva
- #defined
- Macros pré-definidas
- Exemplo 3: Obtenha a hora corrente usando __TIME__
- Leituras recomendadas
Incluindo Arquivos de Cabeçalho: #Incluindo
O pré-processador #include
é usado para incluir arquivos de cabeçalho para programas em C. Por exemplo,
#include <stdio.h>
Aqui, stdio.h
é um ficheiro de cabeçalho. A diretiva #include
preprocessor substitui a linha acima com o conteúdo de stdio.h
arquivo de cabeçalho.
É por isso que você precisa usar #include <stdio.h>
antes de poder usar funções como scanf()
e printf()
.
Você também pode criar seu próprio arquivo de cabeçalho contendo declaração de funções e incluí-lo em seu programa usando esta diretiva de pré-processador.
#include "my_header.h"
Visitar esta página para aprender mais sobre o uso de arquivos de cabeçalho.
Macros usando #define
Uma macro é um fragmento de código que recebe um nome. Você pode definir uma macro em C usando a diretiva #define
preprocessador.
Aqui está um exemplo.
#define c 299792458 // speed of light
Aqui, quando usamos c em nosso programa, ele é substituído por 299792458
.
Exemplo 1: #define preprocessor
#include <stdio.h>#define PI 3.1415int main(){ float radius, area; printf("Enter the radius: "); scanf("%f", &radius); // Notice, the use of PI area = PI*radius*radius; printf("Area=%.2f",area); return 0;}
Função como Macros
Pode também definir macros que funcionam de uma forma semelhante a uma chamada de função. Isto é conhecido como macros com funções. Por exemplo,
#define circleArea(r) (3.1415*(r)*(r))
Tempo que o programa se encontra circleArea(argument)
, ele é substituído por (3.1415*(argument)*(argument))
.
Suponha, passamos 5 como um argumento então, ele se expande como abaixo:
circleArea(5) expands to (3.1415*5*5)
Exemplo 2: Usando #define preprocessor
#include <stdio.h>#define PI 3.1415#define circleArea(r) (PI*r*r)int main() { float radius, area; printf("Enter the radius: "); scanf("%f", &radius); area = circleArea(radius); printf("Area = %.2f", area); return 0;}
Visite esta página para aprender mais sobre macros e #define preprocessor.
Conditional Compilation
Na programação em C, você pode instruir o preprocessador a incluir ou não um bloco de código. Para fazer isso, diretivas condicionais podem ser usadas.
É similar a uma instrução if
com uma grande diferença.
A instrução if
é testada durante o tempo de execução para verificar se um bloco de código deve ser executado ou não, enquanto que, os condicionals são usados para incluir (ou pular) um bloco de código no seu programa antes da execução.
Uses of Conditional
- usar código diferente dependendo da máquina, sistema operacional
- compilar o mesmo arquivo fonte em dois programas diferentes
- excluir determinado código do programa, mas mantê-lo como referência para fins futuros
Como usar o condicional?
Para usar condicional, #ifdef
, #if
, #defined
, #else
e #elseif
são usadas diretivas.
#ifdef Directiva
#ifdef MACRO // conditional codes#endif
Aqui, os códigos condicionais são incluídos no programa apenas se MACRO estiver definido.
#if, #elif e #else Directiva
#if expression // conditional codes#endif
Aqui, expressão é uma expressão do tipo inteiro (pode ser inteiros, caracteres, expressão aritmética, macros e assim por diante).
Os códigos condicionais são incluídos no programa somente se a expressão for avaliada a um valor não zero.
A directiva opcional #else
pode ser usada com #if
directiva.
>
#if expression conditional codes if expression is non-zero#else conditional if expression is 0#endif
Pode também adicionar condicional aninhado ao seu #if...#else
usando #elif
#if expression // conditional codes if expression is non-zero#elif expression1 // conditional codes if expression is non-zero#elif expression2 // conditional codes if expression is non-zero#else // conditional if all expressions are 0#endif
#defined
O operador especial #defined é usado para testar se uma determinada macro está definida ou não. É frequentemente usado com a diretiva #if.
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048 // codes
Macros pré-definidas
Aqui estão algumas macros pré-definidas na programação C.
Macro | Valor |
---|---|
__DATE__ |
Uma cadeia contendo a data corrente |
A string contendo o nome do ficheiro | |
__LINE__ |
Um número inteiro representando o número da linha actual |
__STDC__ |
Se seguir a norma ANSI C, então o valor é um inteiro não nulo |
__TIME__ |
Uma string contendo a data atual. |
Exemplo 3: Obtenha a hora corrente usando __TIME__
O programa seguinte produz a hora corrente usando __TIME__
macro.
#include <stdio.h>int main(){ printf("Current time: %s",__TIME__); }
Saída
Current time: 19:54:39
Leituras recomendadas
- Controle de linha
- Pragmas
- Pré-processador de saída
- Outras diretivas