Latest web development tutorials

preprocesador de C ++

Algunas directivas de preprocesador, dirige al preprocesador que el compilador antes de la compilación real que necesita para completar.

Todas las directivas de preprocesador son (#) a partir de la muestra de la libra, solamente un carácter de espacio puede aparecer antes de que las directivas del preprocesador. C ++ directiva de preprocesador no es una declaración, por lo que no son un punto y coma; al final ().

Hemos visto todos los casos anteriores tienen directiva#include.Esta macro se utiliza el archivo de cabecera se incluye en el archivo de origen.

C ++ también es compatible con una serie de directivas de preprocesamiento, tales como # incluyen, # define, #, # si lo demás, # de línea, etc., echemos un vistazo a estas instrucciones son importantes.

preprocesamiento #define

directiva de preprocesador #define utiliza para crear una constantes simbólicas. La constante simbólica se suele llamar unamacro, la forma del comando general es:

#define macro-name replacement-text 

Cuando esta línea de código aparece en un archivo, el archivo aparece en la posterior Todas las macros serán reemplazados con el reemplazo de texto antes de compilar el programa. Por ejemplo:

#include <iostream>
using namespace std;

#define PI 3.14159

int main ()
{
 
    cout << "Value of PI :" << PI << endl; 

    return 0;
}

Ahora, vamos a probar este código, echar un vistazo a los resultados de pretratamiento. Supongamos que el archivo de origen ya existe, a continuación, utilizar la opción -E para compilar y para redirigir los resultados de test.p. Ahora, si nos fijamos test.p archivo, verá que ya contiene una gran cantidad de información, y el valor se ha modificado en la parte inferior del archivo de la siguiente manera:

$gcc -E test.cpp > test.p

...
int main ()
{
 
    cout << "Value of PI :" << 3.14159 << endl; 

    return 0;
}

Funciones macro

Puede usar # define para definir la macro de la siguiente manera con un 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;
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

The minimum is 30

La compilación condicional

Hay varios comandos que se pueden utilizar de forma selectiva en la parte del código fuente del programa se compila. Este proceso se conoce como la compilación condicional.

Estructura y elegir si las condiciones estructurales al igual que el preprocesador. Considere el siguiente código de paso preprocesador:

#ifndef NULL
   #define NULL 0
#endif

Sólo se pueden hacer cuando se compila con la depuración, la depuración se puede realizar utilizando una macro, de la siguiente manera:

#ifdef DEBUG
   cerr <<"Variable x = " << x << endl;
#endif

Si antes de depurar la instrucción #ifdef se ha definido de depuración constante simbólica, será sobre los estadoscerr programa compilado.Puede utilizar #if 0 comentario de lado la parte del programa de instrucción, de la siguiente manera:

#if 0
   不进行编译的代码
#endif

Vamos a tratar los siguientes ejemplos:

#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;
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

Trace: Inside main function
The minimum is 30
Trace: Coming out of main function

# y ## operadores

# ## Y operador de pre-procesamiento en C ++ y ANSI / ISO C en que esté disponible. # Operador contador de reemplazo de texto se convierte en una cadena entre comillas.

Considere la siguiente definición de la macro:

#include <iostream>
using namespace std;

#define MKSTR( x ) #x

int main ()
{
    cout << MKSTR(HELLO C++) << endl;

    return 0;
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

HELLO C++

Vamos a ver cómo funciona. Comprensiblemente, C ++ preprocesador la siguiente línea:

cout << MKSTR(HELLO C++) << endl;

Convertido en:

cout << "HELLO C++" << endl;

## Los operadores se utilizan para conectar dos fichas. He aquí un ejemplo:

#define CONCAT( x, y )  x ## y

Cuando CONCAT aparece en el programa, sus parámetros estarán ligados, y se utilizaron para reemplazar la macro. Por ejemplo, el programa de CONCAT (Hola, C ++) se sustituye por "HOLA C ++", como se muestra en los siguientes ejemplos.

#include <iostream>
using namespace std;

#define concat(a, b) a ## b
int main()
{
   int xy = 100;
   
   cout << concat(x, y);
   return 0;
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

100

Vamos a ver cómo funciona. Comprensiblemente, C ++ preprocesador la siguiente línea:

cout << concat(x, y);

Convertido en:

cout << xy;

macros predefinidas C ++

C ++ se proporciona en la tabla a continuación algunas macros predefinidas:

描述
__LINE__ 这会在程序编译时包含当前行号。
__FILE__ 这会在程序编译时包含当前文件名。
__DATE__ 这会包含一个形式为 month/day/year 的字符串,它表示把源文件转换为目标代码的日期。
__TIME__ 这会包含一个形式为 hour:minute:second 的字符串,它表示程序被编译的时间。

Veamos estos ejemplos 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;
}

Cuando el código se compila y ejecuta, produce los siguientes resultados:

Value of __LINE__ : 6
Value of __FILE__ : test.cpp
Value of __DATE__ : Feb 28 2011
Value of __TIME__ : 18:52:48