Tipos de preprocesamiento y función

Tabla de contenido

 

1. Definición macro

1.1 Definición de macro sin parámetros

1.2 Definición de macro con parámetros

Dos, directiva #include

Tres, compilación condicional

3.1 comando #if, comando #else y comando elif

Comando ①, #if

②, comando #else

③, comando #elif

3.2 comando #ifdef y comando #ifndef

3.3 comando #undef

3.4 comando #line

3.5 comando #pragma

Cuatro, función interna y función externa

4.1 Funciones internas

4.2 Funciones externas


1. Definición macro

1.1 Definición de macro sin parámetros

#define PI 3.14159

一般用大写字母表示,以便与变量名相区分


#define SIDE 5
#define PERIMETER 4 * SIDE
#define  AREA SIDE * SIDE

#define  STAND "you are girl"
printf(STAND);

Nota :

  • Si hay un nombre de macro en la cadena, no se reemplazará

#define TEST "this is an example" 

main()
{
	char exp[30] = "The TEST is not that TEST";
   	printf(" %s\n", exp);
   	printf("\n");
}

  • Si la cadena tiene más de una línea, puede usar '\' para continuar la línea al final de la línea.
  • El comando #define aparece fuera de la función en el programa, y ​​el rango efectivo del nombre de la macro define el comando hasta el final del archivo fuente.

 

  • Utilice el comando #define para terminar el alcance de la definición de macro
#define TEST "this is an example" 

main()
{
   	printf(TEST);
   	printf("\n");
   	#undef TEST
}	

1.2 Definición de macro con parámetros

#define MIX(a,b) ((a) * (b) + (b))

main()
{
	int x = 5, y = 9;
	
   	printf("%d, %d\n", x, y);
   	printf("the min number %d\n", MIX(x, y));
   	printf("\n");
   	
}	

Nota :

  • Se deben agregar paréntesis a los parámetros al definir la macro.
  • La expansión de macro usa paréntesis para proteger las operaciones de baja prioridad de la expresión, de modo que se pueda lograr el efecto deseado cuando se llame.

Dos, directiva #include

#include puede incluir todo el contenido de otro archivo fuente,

#include "studio.h"
#include <stdio.h>
  • Corchetes angulares: el sistema busca los archivos que se incluirán en el directorio donde se almacenan los archivos de encabezado de la función de la biblioteca C, es decir, de la forma estándar. Tales como: el archivo de encabezado incluido para llamar a las funciones de la biblioteca
  • Comillas dobles: el sistema primero busca los archivos que se incluirán en el directorio actual del usuario, si no se encuentran, luego busca los archivos que se incluirán en el directorio donde se almacena el archivo de encabezado de la función de biblioteca C. Por ejemplo: archivos escritos por el usuario .

Hay archivos incrustados incrustados en el comando #include, archivos anidados.

文件f1.h
#define P printf
#define S scanf
#define D "%d"
#define C "%c"


文件f2.c
#include <stdio.h>
#include "f1.h"

void main()
{
    int a;
    P("请输入第一个整数值:\n");
    S(D, &a);
}

En general, ponga el siguiente contenido en .h

  • Definición de macro
  • Declaraciones de estructura, unión y enumeración
  • declaración typedef
  • Declaración de función externa
  • Declaración de variable global

Nota :

  • Un comando #include solo puede especificar un archivo incluido
  • Las inclusiones de archivos se pueden anidar, es decir, un archivo incluido también puede contener otro archivo incluido
  • Cuando el archivo file2.h se incluye en filel.c, se convierte en un archivo en lugar de dos archivos después de la precompilación. En este momento, si hay una variable estática global en file2.h, la variable global está en el archivo filel.c También es válido, no es necesario utilizar una declaración externa en este momento.

Tres, compilación condicional

3.1 comando #if, comando #else y comando elif

Comando ①, #if

Comando #if: Si la expresión del parámetro después del comando #if es verdadera, compile el segmento del programa entre #if y #endif, de lo contrario omita este programa. #endif se usa para indicar el final de la sección #if.

formulario:

#define NUM 50

main()
{
	int i = 0;
	
	#if NUM > 50
	 	i++;
	#endif
	
	#if NUM == 50
	 	i = i + 50;
	#endif
	
	#if NUM < 50
	 	i--;
	#endif
	
   	printf(" %d\n", i);
   	printf("\n");
}	

②, comando #else

#else: proporciona otra opción cuando #if es falso,

#define NUM 50

main()
{
	int i = 0;
	
	#if NUM > 50
	 	i++;
	#else
	#if NUM < 50
	 	i--;
	#else
	 	i = i + 50;
	#endif
	#endif
	
   	printf(" %d\n", i);
   	printf("\n");
}	

③, comando #elif

Comando #elif: se utiliza para crear "si ... o si ..."

 

#define NUM 50

main()
{
	int i = 0;
	
	#if NUM > 50
	 	i++;
	#elif NUM < 50
	 	i--;
	#else
	 	i = i + 50;
	#endif
	
   	printf(" %d\n", i);
   	printf("\n");   	
}	

3.2 comando #ifdef y comando #ifndef

 #ifdef: si está definido

  • #ifdef: Si se ha definido el nombre de reemplazo de la macro, se compila el "segmento de oración"; si el nombre de reemplazo de la macro después de #ifdef no está definido.

  • #ifdef se usa junto con #else: si se ha definido el nombre de reemplazo de la macro, se compila el "segmento de oración 1"; si no se define el nombre de reemplazo de la macro después de #ifdef, se compila el "segmento de oración 2".

 #ifndef: si no hay una definición

  • #ifndef: Si el nombre de reemplazo de la macro no está definido, se compila el "segmento de oración", si se define el nombre de reemplazo de la macro después de #ifndef.

  • #ifndef se usa junto con #else: si no se ha definido el nombre de sustitución de macro, se compila el "segmento de oración 1"; si se define el nombre de sustitución de macro después de #ifndef, se compila el "segmento de oración 2".

#define STR "dillgence is the parent of success\n"

main()
{
	#ifdef STR
		printf(STR);
	#else
		printf("dillgence is the root of all evil\n");  
	#endif
	
	printf("\n");
	
	#ifndef ABC
		printf("dillgence is the root of all evil\n");
	#else
		printf(STR);  
	#endif
	
   	printf("\n");
   	
}	

3.3 comando #undef

#undef puede eliminar la definición de macro predefinida.

#define MAX_SIZE 100
char array[MAX_SIZE];
#undef  MAX_SIZE

3.4 comando #line

#line se usa para cambiar el contenido de __LINE__ y __FILE__, __LINE__ almacena el número de línea de la línea de compilación actual y __FILE__ almacena el nombre del archivo de compilación actual

El número de línea es el número de línea actual en el programa fuente y el nombre del archivo es el nombre del archivo fuente. El comando #line se utiliza principalmente para depuración y otras aplicaciones especiales.

#line 100 "15.7.C" 
 
  main()
{
  	printf("1.当前行号:%d\n", __LINE__);
  	printf("2.当前行号:%d\n", __LINE__);
	printf("\n");
 }
 

3.5 comando #pragma

#pragma: establece el estado del compilador o indica al compilador que complete algunas acciones específicas.

  • Parámetro de mensaje: este parámetro puede generar el mensaje correspondiente en la ventana de salida del mensaje de compilación.
  • parámetro code_seg: establece el segmento de código donde se almacena el código de función en el programa
  • parámetro de código: asegúrese de que el archivo de encabezado se compile una vez.

Nombre de macro predefinido

  • __LINE__: el número de línea del código compilado actualmente.
  • __FILE__: el nombre de archivo del programa fuente actual.
  • __DATE__: la hora de creación del programa fuente actual
  • __TIME__: la hora de creación del programa fuente actual
  • __STDC__: se usa para determinar si el compilador actual es el estándar C, su valor es 1, lo que significa que cumple con el estándar C, de lo contrario no es el estándar C

Cuatro, función interna y función externa

4.1 Funciones internas

Función interna (función estática): espero que esta función solo la use el archivo fuente donde se encuentra,

static int ADD(int iNum1, int iNum2)
{
}

static char* GetString(char* pString)
{
	return pString;
}

static void ShowString(char* pString)
{
	printf("%s\n", pString );
}
 
  main()
{
  	char* pMyString;
  	pMyString = GetString("MingRi");
  	ShowString(pMyString);
  	
	printf("\n");
 }

4.2 Funciones externas

La definición de funciones externas se puede modificar con extern. Cuando use una función externa, debe usar extern para declarar que la función utilizada es una función externa

extern int Add(int iNum1, int iNum2);
extern char* GetString(char* pString);
extern void ShowString(char* pString);

 char* GetString(char* pString)
{
	return pString;
}

 void ShowString(char* pString)
{
	printf("%s\n", pString );
}
 
  main()
{
  	char* pMyString;
  	pMyString = GetString("MingRi");
  	ShowString(pMyString);
	printf("\n");
 }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Supongo que te gusta

Origin blog.csdn.net/qq_41070511/article/details/114134988
Recomendado
Clasificación