c – sizeof style: sizeof (tipo) o sizeof variable?

Pregunta:

He visto dos estilos de usar sizeof para operaciones relacionadas con la memoria (como en memset o malloc ):

  • sizeof(type) , y
  • sizeof variable o sizeof(variable)

¿Cuál preferirías, o usarías una combinación de los dos estilos, y cuándo usarías cada estilo? ¿Cuáles son los pros y los contras de cada estilo y cuándo los usa?

Como ejemplo, puedo ver el siguiente par de situaciones en las que un estilo ayuda y el otro no:

Cuando se equivoca la indirección del puntero:

type *var;
...
memset(var, 0, sizeof var);    /* oops */

Cuando cambia el tipo:

new_type var;    /* changed from old_type to new_type */
...
memset(&var, 0, sizeof(old_type));    /* oops */

Respuesta:

Prefiero sizeof(variable) sobre sizeof(type) . Considerar:

int a1;
float a2;
memset(&a1,0,sizeof(a1));
memset(&a2,0,sizeof(a2));

vs.

int a1;
float a2;
memset(&a1,0,sizeof(int));
memset(&a2,0,sizeof(float));

En el primer caso, es fácil verificar que se estén pasando los tamaños correctos a memset . En el segundo caso, debe revisar constantemente las secciones superior e inferior para asegurarse de que sea coherente.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım