Tabla de contenido
1.1 Definición de macro sin parámetros
1.2 Definición de macro con parámetros
3.1 comando #if, comando #else y comando elif
3.2 comando #ifdef y comando #ifndef
Cuatro, función interna y función externa
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");
}