O melhor tutorial C pré-processador em 2024. Neste tutorial você pode aprender Exemplos de pré-processador,macros predefinidas,operador de pré-processador,macro parametrizado,

C pré-processador

Parte dopré-processador de C não é o compilador, mas é o processo de estabelecimento de um passo separado.Em suma, C pré-processador é apenas uma ferramenta de substituição de texto somente, eles vão instruir o compilador para compilar pré-tratamento completo antes da real necessidade. Vamos C pré-processador (C Preprocessor) abreviado como CPP.

Todas as encomendas são pré-processador com um sinal de libra (#) no início. Deve ser o primeiro caractere não-branco, a fim de melhorar a legibilidade, as directivas de pré-processador deve começar na primeira coluna. Listados abaixo estão todas as instruções importantes pré-processador:

指令描述
#define定义宏
#include包含一个源代码文件
#undef取消已定义的宏
#ifdef如果宏已经定义,则返回真
#ifndef如果宏没有定义,则返回真
#if如果给定条件为真,则编译下面代码
#else#if 的替代方案
#elif如果前面的 #if 给定条件不为真,当前条件为真,则编译下面代码
#endif结束一个 #if……#else 条件编译块
#error当遇到标准错误时,输出错误消息
#pragma使用标准化方法,向编译器发布特殊的命令到编译器中

Exemplos de pré-processador

Análise para entender os exemplos a seguir instruções diferentes.

#define MAX_ARRAY_LENGTH 20

Esta directiva diz CPP para substituir todos MAX_ARRAY_LENGTH 20. Use#definepara definir constantes para melhorar a legibilidade.

#include <stdio.h>
#include "myheader.h"

Estas instruções dizem ao CPP stdio.h começa a partir dabiblioteca do sistema, e adicionar o texto ao arquivo de origem atual.A próxima linha diz CPPmyheader.h começar a partir do diretório local e adicionar conteúdo ao arquivo de origem atual.

#undef  FILE_SIZE
#define FILE_SIZE 42

Este comando diz CPP cancelar FILE_SIZE definido, e defini-lo como 42.

#ifndef MESSAGE
   #define MESSAGE "You wish!"
#endif

Este comando diz única CPP quando MENSAGEM indefinido apenas quando definido MENSAGEM.

#ifdef DEBUG
   /* Your debugging statements here */
#endif

Este comando diz CPP se definir DEBUG, em seguida, executa declaração de transformação. Em tempo de compilação, se você passar interruptor-DDEBUGpara compilador gcc, este comando é útil. Ele define DEBUG, você sempre pode ligar ou desligar a depuração durante a compilação.

macros predefinidas

ANSI C define uma série de macros. Na programação, você pode usar essas macros, mas diferente para modificar diretamente esses macros pré-definidas.

描述
__DATE__当前日期,一个以 "MMM DD YYYY" 格式表示的字符常量。
__TIME__当前时间,一个以 "HH:MM:SS" 格式表示的字符常量。
__FILE__这会包含当前文件名,一个字符串常量。
__LINE__这会包含当前行号,一个十进制常量。
__STDC__当编译器以 ANSI 标准编译时,则定义为 1。

Vamos tentar os seguintes exemplos:

#include <stdio.h>

main()
{
   printf("File :%s\n", __FILE__ );
   printf("Date :%s\n", __DATE__ );
   printf("Time :%s\n", __TIME__ );
   printf("Line :%d\n", __LINE__ );
   printf("ANSI :%d\n", __STDC__ );

}

Quando o código de cima (no ficheirotest.c) são compilados e executadas, que produz os seguintes resultados:

File :test.c
Date :Jun 2 2012
Time :03:36:24
Line :8
ANSI :1

operador de pré-processador

C pré-processador fornece os seguintes operadores para ajudar a criar uma macro:

A continuação do operador de macro (\)

A macro é geralmente escrito em uma única linha. No entanto, se a macro é muito grande para caber em uma única linha, use a continuação do operador de macro (\). Por exemplo:

#define  message_for(a, b)  \
    printf(#a " and " #b ": We love you!\n")

operador de strings literais quantização (#)

Em definições de macro, quando você precisa colocar um argumento de macro para uma string constante, a constante operador de quantização string (#). Macro usando o operador tem um parâmetro ou parâmetro lista específica. Por exemplo:

#include <stdio.h>

#define  message_for(a, b)  \
    printf(#a " and " #b ": We love you!\n")

int main(void)
{
   message_for(Carole, Debra);
   return 0;
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

Carole and Debra: We love you!
operador de colagem token (##)

operador de colagem token (##) dentro da definição da macro irá fundir os dois parâmetros. Ele permite que duas marcas definição de macro independentes são combinados em um tag. Por exemplo:

#include <stdio.h>

#define tokenpaster(n) printf ("token" #n " = %d", token##n)

int main(void)
{
   int token34 = 40;
   
   tokenpaster(34);
   return 0;
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

token34 = 40

Isto é como isso aconteceu, porque este exemplo irá produzir a seguinte saída real do compilador:

printf ("token34 = %d", token34);

Este exemplo demonstra o token ## n se conecta a token34 aqui, usamos ooperador string constante quantização (#) e operador de colagem token de (##).

defined () operador

operador pré-processadordefinido é usado em uma expressão constante utilizado para determinar se um identificador tiver sido definida utilizando o #define.Se o identificador especificado já está definido, o valor é verdadeiro (não-zero). Se o identificador especificado não está definido, o valor é falso (zero). O seguinte exemplo ilustra o uso do operador definida ():

#include <stdio.h>

#if !defined (MESSAGE)
   #define MESSAGE "You wish!"
#endif

int main(void)
{
   printf("Here is the message: %s\n", MESSAGE);  
   return 0;
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

Here is the message: You wish!

macro parametrizado

CPP é um poderoso recurso pode ser usado para simular a função macro parametrizado. Por exemplo, o código seguinte é calcular o quadrado de um número:

int square(int x) {
   return x * x;
}

Podemos usar um macro para reescrever o código acima, como segue:

#define square(x) ((x) * (x))

Antes de utilizar macros com parâmetros, você deve usaruma directiva #define.Lista de parâmetros é colocado entre parênteses, e deve ser imediatamente atrás do nome da macro. Um espaço entre o nome da macro e o parêntese esquerdo não é permitido. Por exemplo:

#include <stdio.h>

#define MAX(x,y) ((x) > (y) ? (x) : (y))

int main(void)
{
   printf("Max between 20 and 10 is %d\n", MAX(10, 20));  
   return 0;
}

Quando o código acima é compilado e executado, ele produz os seguintes resultados:

Max between 20 and 10 is 20
C pré-processador
10/30