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,
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 | 使用标准化方法,向编译器发布特殊的命令到编译器中 |
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.
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
C pré-processador fornece os seguintes operadores para ajudar a criar uma 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")
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 (##) 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 (##).
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!
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