Red de conocimiento informático - Computadora portátil - ¿Cuáles son los comandos de preprocesamiento en lenguaje C?

¿Cuáles son los comandos de preprocesamiento en lenguaje C?

Podemos insertar instrucciones al compilador en el programa fuente C. Estas instrucciones se denominan instrucciones de preprocesador y amplían el entorno de programación. Los comandos de preprocesamiento comúnmente utilizados se resumen a continuación:

1.

Preprocesador

Según la definición del estándar ANSI, el preprocesador debe procesar las siguientes instrucciones:

p>

#if

#ifdef

#ifndef

#else

#elif

#endif

#Definición

#undef

#Línea

#Error

#Notas varias

p>

#Include

Obviamente, las 12 instrucciones de preprocesamiento anteriores comienzan con el símbolo #, y cada instrucción de preprocesamiento debe tener una línea.

2.

#Definición

La directiva #define define un identificador y una cadena (es decir, un juego de caracteres). Cuando se encuentra un identificador en el programa fuente, se reemplaza por una cadena. Este identificador se denomina nombre de macro y el reemplazo correspondiente se denomina reemplazo de macro. La forma general es la siguiente:

#Definición

Nombre de macro

Secuencia de caracteres

Esta declaración no termina con punto y coma. Puede haber varios espacios entre el nombre de la macro y la cadena, pero la cadena sólo puede terminar en una nueva línea después de comenzar.

Por ejemplo, usamos IZQUIERDA para representar 1, DERECHA para representar 0 y usamos dos directivas #define:

#Definición

La izquierda

1

#Definición

Correcto

Siempre que se encuentre IZQUIERDA o DERECHA en el programa fuente, el compilador lo reemplaza con 1 o 0.

Después de definir un nombre de macro, se puede utilizar en otras definiciones de macro, por ejemplo:

#Definición

a

1

#Definición

Dos

Uno y Uno

#Definición

Tres

Uno Dos

La sustitución de macros reemplaza los identificadores con cadenas relevantes. Entonces, si desea definir un mensaje de error estándar, puede definirlo de la siguiente manera:

#define

error_ms

"standard

p>

Error

En

Entrada

\n "

Si la cadena tiene más de una línea, puedes ponerla al final de la línea Continúe la línea con una barra invertida, como sigue:

#Definition

Cadena larga

"This

es

una

Muy

Muy

Línea

\

Línea

p>

Ese

es

de segunda mano

como

uno

<; p>ejemplo"

3.

#Error

La instrucción #error fuerza al compilador a detener la compilación y se utiliza principalmente para la depuración de programas. La forma general de la directiva #error es:

#Error

Mensaje de error

Tenga en cuenta que el mensaje de error de la cadena de macro no está entre comillas dobles. Cuando se encuentra una directiva #error, se muestra un mensaje de error y también se puede mostrar otro contenido predefinido por el autor del compilador.

4.

#Include

La directiva #include en un programa requiere que el compilador lea otro archivo fuente. El nombre del archivo a leer debe estar entre comillas dobles ("") o un par de corchetes angulares (

#include

" stdio.h "

#include

ltstdio.h gt

Deje que el compilador de C lea y compile el archivo de encabezado de la función de biblioteca del sistema de E/S.

Los archivos incluidos pueden contener otras directivas #include, que se denominan inclusiones anidadas. La profundidad de anidamiento máxima permitida varía entre compiladores.

Los nombres de archivos entre comillas dobles o corchetes angulares determinan el método de búsqueda para el archivo especificado. Cuando el nombre del archivo está entre corchetes angulares, la búsqueda se realiza de acuerdo con la definición del autor del compilador, que generalmente se usa para buscar algunos directorios especiales donde se colocan los archivos. Cuando el nombre del archivo está entre corchetes dobles, la búsqueda se realiza de acuerdo con las regulaciones en tiempo real del compilador, generalmente se busca en el directorio actual. Si no lo encuentra, busque nuevamente usando corchetes angulares.

Normalmente, la mayoría de los programadores incluyen archivos de encabezado estándar entre corchetes angulares y usan comillas dobles para incluir nombres de archivos relacionados con el programa actual.

5.

Directivas de compilación condicional

Varias directivas de compilación permiten a los programadores compilar selectivamente diferentes partes del código fuente de un programa. Este proceso se llama compilación condicional.

5.1#if, #else, #elif

#endif

Quizás las directivas de compilación condicional más utilizadas sean #if, #else, #elif y #endif. Estas directivas permiten a los programadores ajustar condicionalmente partes de código según el resultado de una expresión constante.

La forma general de #if es:

#If

Expresión constante

Declaración

Secuencia

#endif

Si la expresión constante después de #if es verdadera, se compila el código entre #if y #endif; de lo contrario, se ignora el segmento de código. #endif marca el final del bloque #if.

La instrucción #else es similar a la instrucción else en lenguaje C y puede usarse como instrucción de reemplazo cuando la instrucción #if falla. Por ejemplo:

#Incluye

ltstdio.h gt

#Definición

Max (nombre masculino es igual a Maximilian)

100

(Igual que organizaciones internacionales) Organizaciones internacionales

Principal (no válido)

{

#If

MAX gt99

printf("Compilado

como

dispuesto

más grande

que

99.\ n ");

# De lo contrario

printf("obedecer

para

pequeño

Array.\n");

#endif

devuelve

0;

}

Tenga en cuenta que #else marca el final del bloque #if y el comienzo del bloque #else. Porque solo se puede escribir una coincidencia #endif para cada #if.

La directiva #elif significa "else, if", estableciendo una cadena if-else-if para varias opciones de compilación. Si la expresión #if es verdadera, el bloque de código se compila sin probar otras expresiones #elif. De lo contrario, si tiene éxito, se prueba y compila el siguiente bloque de la secuencia. La forma general es la siguiente:

#if

representación

declaración

orden

#elif

Expresión 1

Declaración

Secuencia

#elif

Expresión 2

Declaración

p>

Pedido

.

.

.

#elif

Representación

Declaración

Orden

#endif

5.2 #ifdef y #ifndef

Otro método de compilación condicional es utilizar las directivas de compilación #ifdef y #ifndef, que significan "si está definido" y "si no está definido" respectivamente.

La forma general de #ifdef es la siguiente:

#ifdef

Nombre de macro

Declaración

Orden

#endif

Si el nombre de la macro se definió originalmente mediante una instrucción #define, el bloque de código que contiene se compila.

La forma general de #ifndef es:

#ifndef

Nombre de macro

Declaración

Orden

p>

#endif

Si la declaración #define actualmente no define un nombre de macro, el bloque de código que contiene se compila.

Creo que es conveniente activar/desactivar una característica específica de todo el programa.

Tanto #ifdef como #ifndef pueden usar declaraciones #else o #elif.

#inlucde

ltstdio.h gt

#Definición

T

10

(Igual que Organizaciones Internacionales)Organizaciones Internacionales

Principal (inválido)

{

#ifdef

t

Printf("Hola

t \ n ");

# De lo contrario

Printf("Hola

Cualquiera\ n " );

#endif

#ifndef

M

Printf("M

No

Definido\n ");

#endif

Devuelve

0;

}

6.

#undef

La instrucción #undef elimina el nombre de la macro previamente definida. En otras palabras, "no define" la macro. La forma general es:

#undef

Nombre de macro

7.

Uso definido

excepto # Además de ifdef, existe otra forma de determinar si un nombre de macro está definido, es decir, puede usar la directiva #if con un operador definido en tiempo de compilación. La forma general de un operador definido es la siguiente:

Borrar

Nombre de macro

La expresión es verdadera si el nombre de la macro está actualmente definido; en caso contrario, es falsa.

Por ejemplo, para determinar si la macro MY está definida, puede utilizar uno de los dos comandos de preprocesamiento siguientes:

#if

clear

Yate a motor

o

#ifdef

Yate a motor

¡También puedes añadir un signo de exclamación antes de la definición! "Invierte la condición correspondiente. Por ejemplo, compila solo si DEBUG no está definido.

#IF

!Clear

DEBUG

Printf("Final

version!\n ");

#endif

Una razón para usar definido es que permite macros determinadas por el nombre de las declaraciones #elif existe.

8.

#LINE

La directiva #line cambia el contenido de __LINE__ y __FILE__. Un identificador predefinido en el compilador. El identificador __LINE__ es el número de línea de la línea de código actualmente compilada y el contenido de __FILE__ es el nombre del archivo fuente actualmente compilado. La forma general de #line es:

#LINE

.

Número

"Nombre de archivo"

Entre ellos, el número es un entero positivo, que se convierte en el nuevo valor de __LINE__ opcional. El nombre de archivo es un identificador de archivo legal y se convierte en el; El nuevo valor de __FILE__. #line se utiliza principalmente para depuración y aplicaciones especiales.

9.

#Pragma

#pragma es una instrucción definida cuando se implementa el compilador, lo que permite pasar varias instrucciones al compilador. Por ejemplo, el compilador puede tener una opción que admita la ejecución del programa de seguimiento, en cuyo caso puede usar una instrucción #pragma para seleccionar la función. El compilador ignora las opciones #pragma que no admite. #pragma mejora la portabilidad de los programas fuente en C a los compiladores.

10.

Operadores de preprocesamiento # y # #

Hay dos operadores de preprocesamiento: # y # #, que se pueden usar en #define.

El operador # a menudo se denomina operador de cadena, y convierte la siguiente cadena en una cadena entre comillas dobles. Por ejemplo:

#Incluye

ltstdio.h gt

#Definición

mkstr(s)

# s

(Igual que organizaciones internacionales) Organizaciones internacionales

Principal (no válido)

{

Printf(mkstr(I

Me gusta

c));

Devuelve

0;

}

El preprocesador le da a Issue la siguiente declaración:

Printf(mkstr(I

Me gusta

c));

Become

Printf("I

Me gusta

c");

Operador # #Junta dos etiquetas para formar una nueva etiqueta. Por ejemplo:

#includes

ltstdio.h gt

#define

concat(a, a)

A# #B

(Igual que organizaciones internacionales) Organizaciones internacionales

Principal (no válido)

{

(Igual que organizaciones internacionales) Organizaciones Internacionales

Cariotipo masculino normal

=

10;

Printf("d", concat(x, y));

Devuelve

0;

}

El preprocesador da la siguiente declaración:

Printf(" d ", concat(x, y));

Convertirse

Printf("d ", xy);

Los operadores # y # # se utilizan principalmente Este Permite que el preprocesador maneje casos especiales que no son necesarios en la mayoría de los programas.

11.

Macros predefinidos

c #Especifica cinco macros predefinidas inherentes, que son:

__ Línea_ _

__File_ _

__Date_ _

__Time_ _

__STDC__

__LINE__ y __FILE__ contienen el número de línea y el nombre de archivo del programa que se está compilando.

La cadena __DATE__ y el contenido en forma de mes/día/año (mes/día/año) representan la fecha en la que el archivo fuente se convirtió en código de destino.

La cadena en __TIME__ representa el momento en que el código fuente se compila en el código de destino, en el formato de hora:minuto:segundo (hora:minuto:segundo).

Si el contenido de __STDC__ es una constante decimal de 1, significa que la implementación del compilador cumple con el estándar c