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