Entorno del programa y preprocesamiento (2) - Lenguaje C

Este blog está conectado con el artículo anterior "Entorno del programa y preprocesamiento (1)"

contenido

1.#definir

1.1#define definir identificador

 1.2 #define macro de definición

 1.3 # y ## (para entender)

1.4 Parámetros macro con efectos secundarios

1.5 Comparación de macros y parámetros

1.6 Convenciones de nombres

2.#undef

3. Definición de la línea de comandos

4. Compilación condicional

5. El archivo contiene

5.1 Cómo se incluyen los archivos de encabezado

 5.2 Inclusión de archivos anidados


1.#definir

1.1#define definir identificador

#define cosas de nombre

Las castañas son las siguientes:

 

 

Las constantes representadas por macros pueden ser números, caracteres, cadenas y expresiones. Los más comunes son los números.

register int a=1; Declarar explícitamente que la variable debe almacenarse en el registro hasta que la variable desaparezca. Por lo general, es el registro predeterminado y, en la mayoría de los casos, no es necesario escribir el registro.

Nota: No agregue ; al definir el identificador;

Si se agrega, conducirá a los siguientes resultados y NUM se reemplaza por 200;

 1.2 #define macro de definición

Cómo declarar una definición de macro

#define name(parament-list) stuff

Tenga en cuenta que el paréntesis de apertura del parámetro debe estar inmediatamente junto al nombre. Si hay un espacio entre los dos, la lista de parámetros se interpretará como parte del material. 

El siguiente es también un lugar propenso a errores

 Como se puede ver en la pregunta anterior, cuando use definiciones de macros, no sea tacaño con los paréntesis.

Dos notas más

1. Macro, no puede lograr la recursividad

2. Cuando el preprocesamiento busca símbolos definidos por #define, no se busca el contenido de las constantes de caracteres.

 1.3 # y ## (para entender)

A continuación podemos ver este código.

 Se puede encontrar que las cadenas tienen las características de conexión automática.

De acuerdo con esta característica, podemos usar # para convertir un parámetro de macro en una cadena correspondiente

#define PRINT(N, format) printf("the value of "#N" is "format"\n", N)

int main()
{
	int a = 20;
	double pai = 3.14;

	PRINT(a, "%d");
	PRINT(pai, "%lf");

	return 0;
}

 

 Use ## para combinar los símbolos a cada lado en un solo símbolo

Permite que las definiciones de macro creen identificadores a partir de fragmentos de texto separados.

#define CAT(name,num) name##num
int main()
{
	int class105 = 200;
	printf("%d\n", CAT(class, 105));
	return 0;
}

 

1.4 Parámetros macro con efectos secundarios

 Esto muestra que cuando un parámetro de macro aparece más de una vez en una definición de macro, si el parámetro tiene efectos secundarios, puede ser peligroso usar la macro, lo que genera resultados impredecibles. Los efectos secundarios son efectos permanentes de la evaluación de expresiones .

1.5 Comparación de macros y parámetros

Atributos #define definir macro función
longitud del código El uso del programa es largo la mayor parte del tiempo. El código de función solo aparece en un lugar, y el código en ese lugar se llama cuando se usa
velocidad de ejecución más rápido Hay llamadas y devoluciones de funciones, relativamente lentas.
precedencia del operador Se necesitan paréntesis adicionales para evitar resultados impredecibles Los parámetros de la función solo se evalúan una vez y el resultado se pasa a la función, y la evaluación de la expresión es más predecible
Parámetros con efectos secundarios Los argumentos se pueden sustituir en varios lugares de la macro Los parámetros de función solo se usan una vez durante la evaluación y el resultado es fácil de controlar
Tipo de parámetro Los parámetros de la macro son independientes del tipo. parámetros y tipos
depuración Las macros no son fáciles de depurar Se puede depurar oración por oración
recursión no puede recurrir puede recurrir

 

Las macros generalmente se usan para realizar algunas operaciones simples. 

 

1.6 Convenciones de nombres

poner en mayúscula los nombres de las macros

No use todos los nombres de funciones en mayúsculas

2.#undef

#undef NOMBRE

//Si es necesario redefinir un nombre existente, primero se debe eliminar el nombre anterior 

3. Definición de la línea de comandos

 Muchos compiladores de C brindan la capacidad de permitir que se definan símbolos en la línea de comando. El proceso utilizado para iniciar la compilación.

4. Compilación condicional

A la hora de compilar un programa, es muy conveniente si queremos compilar o descartar una sentencia, y podemos satisfacerla con instrucciones de compilación condicional.

Veamos el código de abajo

#define MAX 0
int main()
{
#if defined (MAX)
	printf("haha\n");
#endif

#if !defined(MAX)
	printf("huhu\n");
#endif

#ifdef MAX
	printf("huahua\n");
#endif

#ifndef MAX 
	printf("hlhl\n");
#endif


	return 0;
}

 


Directivas de compilación comunes

 

1. #si expresión constante

             //...

    #terminara si

2. Compilación condicional con múltiples condiciones

#si expresión constante //...

#elif expresión constante //...

#else expresión constante //...

#endif expresión constante //...

3. Determinar si está definido

#si está definido(símbolo)

símbolo #ifdef

#si !definido(símbolo)

símbolo #ifndef

4. Directivas anidadas

#si está definido (OS_UNIX)

      #ifdef OPCION1

          unix_version_option1();

      #terminara si

      #ifdef OPCION2

             unix_versión_opción2();

       #terminara si

#terminara si


5. El archivo contiene

5.1 Cómo se incluyen los archivos de encabezado

#include"nombre de archivo"

Primero busque en el directorio donde se encuentra el archivo fuente, si no lo encuentra, el compilador buscará el archivo de encabezado (archivo de encabezado de la función de biblioteca) en la ubicación estándar.

#include<nombre de archivo>

Vaya directamente a la ruta estándar para encontrar

Nota: Para archivos de biblioteca, también puede usar "" para incluir, pero es ineficiente y no es fácil distinguir entre archivos de biblioteca y archivos locales.

 5.2 Inclusión de archivos anidados

 Dichos archivos anidados se pueden resolver con compilación condicional


Supongo que te gusta

Origin blog.csdn.net/weixin_53939785/article/details/124072267
Recomendado
Clasificación