¿Cuáles son los comandos de preprocesamiento en lenguaje C?
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 p>
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 p>
99.\ n ");
# De lo contrario
printf("obedecer
para
pequeño p>
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: p>
#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