O melhor tutorial pré-processador C ++ em 2024. Neste tutorial você pode aprender pré-processamento #define,funções de macro,compilação condicional,# e ## operadores,macros predefinidas C ++,
Algumas directivas de pré-processador, dirige o pré-processador para o compilador antes da compilação real que você precisa para ser concluído.
Todas as directivas de pré-processador são (#) começando com o sinal de libra, a apenas um caractere de espaço pode aparecer antes das diretivas de pré-processamento. C ++ pré-processador diretiva não é uma declaração, para que eles não são um ponto e vírgula; no final ().
Vimos todas as instâncias anteriores têm diretiva#include.Esta macro é arquivo de cabeçalho utilizado ser incluídos no arquivo de origem.
C ++ também suporta uma série de directivas de pré-processamento, tais como # incluem, # define, # se, # else, # line, etc., vamos olhar para estas instruções importantes.
pré-processador diretiva #define usado para criar uma constantes simbólicas. A constante simbólica é geralmente chamado demacro, a forma do comando geral é:
#define macro-name replacement-text
Quando esta linha de código aparecem em um arquivo, o arquivo aparece na subsequente Todas as macros serão substituídos com a substituição de texto antes de o programa é compilado. Por exemplo:
#include <iostream> using namespace std; #define PI 3.14159 int main () { cout << "Value of PI :" << PI << endl; return 0; }
Agora, vamos testar esse código, dê uma olhada nos resultados de pré-tratamento. Suponha que o arquivo de origem já existe, então use a opção -E para compilar e para redirecionar os resultados para test.p. Agora, se você olhar test.p arquivo, você vai ver que ele já contém uma grande quantidade de informações, eo valor foi alterado no final do arquivo da seguinte forma:
$gcc -E test.cpp > test.p pt. int main () { cout << "Value of PI :" << 3.14159 << endl; return 0; }
Você pode usar # define para definir a macro da seguinte forma com um parâmetro:
#include <iostream> using namespace std; #define MIN(a,b) (((a)<(b)) ? a : b) int main () { int i, j; i = 100; j = 30; cout <<"The minimum is " << MIN(i, j) << endl; return 0; }
Quando o código acima é compilado e executado, ele produz os seguintes resultados:
The minimum is 30
Existem vários comandos que podem ser utilizados selectivamente sobre a parte do código fonte do programa é compilado. Este processo é conhecido como compilação condicional.
Estruturar e escolher se as condições estruturais muito parecido com o pré-processador. Considere o seguinte código de passagem pré-processador:
#ifndef NULL #define NULL 0 #endif
Você pode fazer apenas quando compilado com a depuração, a depuração pode ser realizado utilizando uma macro, como segue:
#ifdef DEBUG cerr <<"Variable x = " << x << endl; #endif
Se antes a instrução DEBUG #ifdef foi definido DEBUG constante simbólica, será sobre as demonstrações programacerr compilados.Você pode usar #if 0 comentário fora a parte declaração do programa, conforme segue:
#if 0 不进行编译的代码 #endif
Vamos tentar os seguintes exemplos:
#include <iostream> using namespace std; #define DEBUG #define MIN(a,b) (((a)<(b)) ? a : b) int main () { int i, j; i = 100; j = 30; #ifdef DEBUG cerr <<"Trace: Inside main function" << endl; #endif #if 0 /* 这是注释部分 */ cout << MKSTR(HELLO C++) << endl; #endif cout <<"The minimum is " << MIN(i, j) << endl; #ifdef DEBUG cerr <<"Trace: Coming out of main function" << endl; #endif return 0; }
Quando o código acima é compilado e executado, ele produz os seguintes resultados:
Trace: Inside main function The minimum is 30 Trace: Coming out of main function
# ## E operador de pré-processamento em C ++ e ANSI / ISO C, em que está disponível. # Operador de substituição de texto token será convertida para uma string entre aspas.
Considere a seguinte definição de macro:
#include <iostream> using namespace std; #define MKSTR( x ) #x int main () { cout << MKSTR(HELLO C++) << endl; return 0; }
Quando o código acima é compilado e executado, ele produz os seguintes resultados:
HELLO C++
Vamos ver como ele funciona. Compreensivelmente, C ++ pré-processador a seguinte linha:
cout << MKSTR(HELLO C++) << endl;
Convertido em:
cout << "HELLO C++" << endl;
## Os operadores são usados para conectar dois tokens. Aqui está um exemplo:
#define CONCAT( x, y ) x ## y
Quando CONCAT aparece no programa, os seus parâmetros vai ser ligado, e utilizado para substituir a macro. Por exemplo, o programa CONCAT (OlÁ, C ++) é substituído por "OlÁ C ++", como mostrado nos exemplos seguintes.
#include <iostream> using namespace std; #define concat(a, b) a ## b int main() { int xy = 100; cout << concat(x, y); return 0; }
Quando o código acima é compilado e executado, ele produz os seguintes resultados:
100
Vamos ver como ele funciona. Compreensivelmente, C ++ pré-processador a seguinte linha:
cout << concat(x, y);
Convertido em:
cout << xy;
C ++ é fornecida na tabela abaixo alguns macros predefinidas:
宏 | 描述 |
---|---|
__LINE__ | 这会在程序编译时包含当前行号。 |
__FILE__ | 这会在程序编译时包含当前文件名。 |
__DATE__ | 这会包含一个形式为 month/day/year 的字符串,它表示把源文件转换为目标代码的日期。 |
__TIME__ | 这会包含一个形式为 hour:minute:second 的字符串,它表示程序被编译的时间。 |
Vejamos esses exemplos macros:
#include <iostream> using namespace std; int main () { cout << "Value of __LINE__ : " << __LINE__ << endl; cout << "Value of __FILE__ : " << __FILE__ << endl; cout << "Value of __DATE__ : " << __DATE__ << endl; cout << "Value of __TIME__ : " << __TIME__ << endl; return 0; }
Quando o código acima é compilado e executado, ele produz os seguintes resultados:
Value of __LINE__ : 6 Value of __FILE__ : test.cpp Value of __DATE__ : Feb 28 2011 Value of __TIME__ : 18:52:48