GNU/Linux >> Tutoriales Linux >  >> Linux

implementación del operador sizeof

El sizeof El operador es parte de la especificación del lenguaje C (y C++) y se implementa dentro del compilador (el front-end). No hay forma de implementarlo con otras construcciones C (a menos que use extensiones GCC como typeof) porque puede aceptar tipos o expresiones como operandos, sin tener ningún efecto secundario (por ejemplo, sizeof((i>1)?i:(1/i)) no se bloqueará cuando i==0 pero tu macro my_sizeof chocaría con una división por cero). Consulte también las pautas de codificación C y wikipedia.

Debe comprender la aritmética de punteros C. Véase, por ejemplo. esta pregunta. La diferencia de puntero se expresa en elementos, no en bytes.


El resultado de la resta del puntero está en elementos y no en bytes. Por lo tanto, la primera expresión se evalúa como 1 por definición.

Aparte de esto, deberías usar paréntesis en las macros:

#define my_sizeof(x) ((&x + 1) - &x)
#define my_sizeof(x) ((char *)(&x + 1) - (char *)&x)

De lo contrario, intentar usar my_sizeof() en una expresión puede dar lugar a errores.


Linux
  1. Alibaba Dragonwell8:la implementación interna de OpenJDK en Alibaba

  2. 7 potentes ejemplos de operadores Awk (operadores Awk unarios, binarios, aritméticos, de cadena, de asignación, condicionales, Reg-Ex)

  3. 7 Ejemplos de operadores Linux Grep OR, Grep AND, Grep NOT

  4. 6 Operadores de encadenamiento de línea de comandos de Bash Shell en Linux

  5. Implementación de espacio de aire para uso de computadora personal

Arreglar "¡No se encontró la implementación del controlador USB 2.0!" Error de caja virtual

Cómo crear un certificado TLS/SSL con un operador de administrador de certificados en OpenShift

[ :Operador inesperado en programación shell

Implementación de múltiples tuberías en C

Implementación de variables de condición

¿El acceso al montón está serializado?