c macros del lenguaje, la compilación condicional

notas de acabado:

C lenguaje de macros definición con parámetros

 

definición de la macro

La forma general de la macro se define como:
cadena de nombre de macro #define o expresión
El preprocesamiento es reemplazar, el nombre de macro se sustituye con la expresión de cadena de caracteres correspondiente.

cadena de definición de macro:

#define cadena de macro-nombre

En este ejemplo, la declaración int suma = 20 + N ;, N fue reemplazado por 100

#include <stdio.h>
 #define N 100
 int main () {
     int suma = 20 + N; 
    printf ( " % d \ n " , suma);
    volver  0 ; 
}

Macro expresión definiciones:

#define   nombre de macro (expresión)
#include <stdio.h>
 #define M (n * n + 3 n *)
 int main () {
     int suma, n; 
    printf ( " número de una entrada: " ); 
    scanf ( " % d " , y n); 
    suma = 3 * M + 4 * M + 5 * M; 
    printf ( " suma =% d \ n " , suma);
    volver  0 ; 
}

Nota: La definición de la macro debe ser una expresión entre paréntesis

Algunas explicaciones para las definiciones de macros

1) nombre de la macro definición de la macro es una cadena de caracteres para indicar, a la hora y la expansión de una macro macro sustituido nombre de la cadena, esto es sólo un simple y sustitución crudo. Cadena puede contener cualquier carácter, que puede ser una expresión constante, IF, funciones, etc., no hacen ninguna comprobación de preprocesador, si mal, sólo se encuentran en el programa fuente se ha recopilado la expansión de macros.

2) no se describen o sentencia de definición de macro, final de la línea no tienen un punto y coma, tal como con punto y coma incluso ser reemplazado con un punto y coma.

3) macro definición debe ser escrito fuera de la función, su alcance está definido en el comando de macro juega el extremo de la fuente. Para poner fin a la utilización de comandos #undef alcance. Por ejemplo:
representa función sólo PI () de manera eficiente en FUNC principal, no válida () en.

#define PI 3.14159
 int main () {
     // Código 
    de retorno  0 ; 
} 
#Undef PI
 vacío func () {
     // Código 
}

4) Si el código está rodeado por comillas nombre de macro, el preprocesador macro no hecho a la misma vez.

5) permite definiciones de macros anidadas, nombres de macro se pueden utilizar en la cadena de caracteres se define en la definición macro, cuando se expande por la sustitución en las capas de la preprocesador macro. Por ejemplo:

#define PI 3.1415926
 #define S * Y Y * PI / PI * nombre de macro se define * / 
para los estados: 
el printf ( " % F " , S); 
después de la sustitución de macro se convierte en: 
el printf ( " % F " , 3.1415926 * Y * Y);

6) habitual nombre de macro en letras mayúsculas, por lo que la diferencia en las variables. Pero también permite que las letras minúsculas.

7) los datos que indican el tipo de macros disponibles, la escritura fácil. Por ejemplo:

#define UINT unsigned int

UINT disponibles en el programa como declaraciones de variables:

UINT a, b;

Se hace notar que los datos que indican los datos de definición de tipo y la diferencia entre el uso de typedef especificador usando definiciones de macro. Cadena macro definición simplemente reemplazado por un pre-procesador para proceso; y typedef se procesa durante la compilación por un compilador, no es el reemplazo de cadena simple, y el tipo de datos a la original de comenzar un nuevo nombre, como un nuevo tipo de datos.


definición de la macro con parámetros


Lenguaje C permite que las macros con argumentos. En los parámetros de definición de macro se llama parámetro "parámetros formales" en la llamada a la macro que se llama "Parámetros reales", y esto es algo función similar.

argumentos de la macro, no sólo durante el despliegue para reemplazar la cadena, sino también para reemplazar un parámetro argumentos.

La forma general de parametrizado definición de macro como:
nombre #define macro (lista de parámetros), o expresión de cadena

Pueden estar contenidos en la cadena de cada parámetro, lista de parámetros de parámetros separados por comas.

La forma general con referencia a la llamada macro:
nombre de macro (lista de argumentos);
por ejemplo:

#define M (Y) + Y * Y * Y. 3 // macros 
// Código 
K M = ( 5. ); // macro llamada

 

nota:

#include <stdio.h>
 #define SQ (y) (y) * (y)
 int main () {
     int a, cuadrados; 
    printf ( " entrada de un número: " ); 
    scanf ( " % d " , & a ); 
    cuadrados = SQ (a + 1 ); 
    printf ( " cuadrados =% d \ n " , cuadrados);
    volver  0 ; 
}
cuadrados = (a + 1) * (a + 1) ;

resultados:

entrada de un número: 9
cuadrados = 100

#include <stdio.h>
 #define SQ (y) y * y
 int main () {
     int a, cuadrados; 
    printf ( " entrada de un número: " ); 
    scanf ( " % d " , & a ); 
    cuadrados = SQ (a + 1 ); 
    printf ( " cuadrados =% d \ n " , cuadrados);
    volver  0 ; 
}
cuadrados = a + 1 * a + 1 ;

resultados:

entrada de un número: 9
cuadrados = 19

 

La compilación condicional

⑴ ... formato # si ... # otra cosa

 

#if de determinación de condición de 
           segmentos de código. 1 
#else 
           segmento de código 2 
#endif 
o 

#if condición de determinación 1 
           1 segmento Código 
#elif condición de determinación 2 
           del código de segmentos 2 
#else 
           segmento de código. 3 
#endif

Función: y si otra cosa ... ... expresión es la misma. escena adecuados determinar la presencia de verdadero y falso, esta condición es una expresión general.


⑵ #ifdef ... # otra cosa ... o # # ifndef ... otra cosa ... formato

#ifdef identificador de 
           segmento de código 1 
#else 
           código de segmento 2 
#endif 

o 

#ifndef identificador de 
           un segmento de código 
#else 
           segmentos de código 2 
#endif

Características: La condición principal es juzgado para ver si el identificador se define (definiciones #define).

En realidad, el proyecto utilizará una gran cantidad de compilación condicional. Por ejemplo, utilizar la compilación condicional por diversas plataformas de hardware, para alcanzar la plataforma y la gestión de la línea de productos a través de la compilación condicional; distinguir entre la versión oficial y la versión de depuración mediante la compilación condicional, y así sucesivamente.

 

parte de preprocesamiento de instrucciones

Instrucciones
# ficticia instrucción, ningún efecto
# include que comprende un archivo de código fuente
# define para las macros
#undef cancelar la macro definida
#if si la condición dada es verdadera, el código del compilador continuación
#ifdef Si la macro se ha definido, el compilador de abajo código
#ifndef Si no se define la macro, el compilador de código a continuación
#elif #if dado si la condición anterior no es cierto, la situación actual es verdad, el compilador de código a continuación
finales #endif de un # si ...... # bloque de compilación condicional demás

 

Supongo que te gusta

Origin www.cnblogs.com/-wenli/p/12459416.html
Recomendado
Clasificación