Diferencias detalladas entre typedef y definir contenidos específicos
La diferencia entre los dos es la siguiente:
(1) Principios diferentes
#define es una sintaxis definida en lenguaje C y una instrucción de preprocesamiento. realice un reemplazo mecánico simple de cadenas durante el preprocesamiento y no realice comprobaciones de corrección. Los posibles errores solo se descubrirán y reportarán al compilar el programa fuente expandido.
Typedef es una palabra clave que realiza la verificación de tipos en tiempo de compilación. Proporciona un alias para un tipo que ya existe en su alcance, pero no puede usar un typedef en una definición de función. El uso de typedef para definir tipos como matrices, punteros, estructuras, etc. brinda una gran comodidad. No solo hace que el programa sea más fácil de escribir, sino que también aclara el significado y mejora la legibilidad.
(2) Diferentes funciones
typedef se utiliza para definir tipos de alias, lo que hace que el tipo sea fácil de recordar. Otra característica es la definición de tipos independientes de la máquina. Por ejemplo, si define un tipo de punto flotante REAL, logrará la mayor precisión en la máquina de destino: typedef long double REAL, en una máquina que no admite long double, se verá así; máquina que no admite long double En una máquina doble, se ve así; typedef float REAL
#define no solo le permite asignar alias a los tipos, sino que también le permite definir constantes, variables, modificadores de compilación, etc.
(3) Diferentes alcances
#define no tiene restricciones de alcance Siempre que la macro esté predefinida, se puede usar en programas posteriores, mientras que typedef tiene la suya propia. alcance.
(4) Diferentes operaciones sobre punteros
#define INTPTR1 int*
typedef int* INTPTR2
INTPTR1 p1, p2 ;
INTPTR2 p3, p4;
significa:
Declarar una variable de puntero p1 y una variable entera p2
Declaración de dos variables de puntero p3 , p4
#define INTPTR1 int*
typedef int* INTPTR2;
int a = 1;
int b = 2;
int c = 3;
const INTPTR1 p1 = amperio;
const INTPTR2 p2 = amperio
INTPTR2; const p3 = amp;c;
En el código anterior,
const INTPTR1 p1 es un puntero constante, lo que significa que el contenido señalado por p1 no se puede modificar a través de p1, pero p1 puede señalar algo más.
const INTPTR2 p2 es un puntero constante, p2 no puede apuntar a nada más. Dado que INTPTR2 representa un tipo de puntero, se califica con const para indicar que el tipo de puntero está bloqueando.
INTPTR2 const p3 es una constante de puntero
Extensión:
Función de definición:
El identificador de la macro definida se llama " Macro nombre". El identificador de una macro definida se denomina "nombre de macro". Durante el proceso de preprocesamiento de compilación, todas las apariciones del "nombre de macro" en el programa serán reemplazadas por la cadena en la definición de macro, lo que se denomina "reemplazo de macro" o "expansión de macro". Esto se llama "macrosustitución" o "macroexpansión". La definición de macro se completa con el comando de definición de macro en el programa fuente. El preprocesador realiza automáticamente la sustitución de macros.
El alcance de la definición de macro está limitado al archivo actual. Por ejemplo, si #define PI 3.14 está definido en file1.c, la definición de macro no funcionará en file2.c; common.h #define PI 3.14 está definido, luego file1.c y file2.c #include "common.h" y #include "common.h" respectivamente. Las definiciones de macros surten efecto en file1.c y file2.c de la misma manera.
En C, o C, hay dos tipos de "maros": macros con parámetros y macros sin parámetros.
Referencia: .
Enciclopedia typedef-Baidu