Saltar al contenido

¿Por qué memset toma un int en lugar de un char?

Después de observar en varios repositorios y sitios de internet finalmente descubrimos la respuesta que te compartiremos aquí.

Solución:

memset es anterior (bastante) a la adición de prototipos de funciones a C. Sin un prototipo, usted hipocresía pasar un char a una función — cuando/si lo intenta, será promovida a int cuando lo pasas, y lo que recibe la función es un int.

También vale la pena señalar que en C, (pero no en C++) un carácter literal como 'a' lo hace no tener tipo char — tiene tipo intentonces lo que pase será generalmente comenzar como un int de todos modos. Esencialmente, la única forma de que comience como char y sea promovido es si aprueba un char variable.

En teoria, memset probablemente podría modificarse para que reciba un char en lugar de un int, pero es poco probable que haya algún beneficio, y una posibilidad bastante decente de romper algún código antiguo u otro. Con un costo desconocido pero potencialmente bastante alto, y casi ninguna posibilidad de ningún beneficio real, diría que las posibilidades de que se cambie para recibir un char caer justo en la línea entre “delgado” y “ninguno”.

Editar (respondiendo a los comentarios): El CHAR_BIT partes menos significativas del int se utilizan como el valor para escribir en el destino.

Probablemente la misma razón por la que las funciones en llevar ints y no chars.

En la mayoría de las plataformas, un char es demasiado pequeño para colocarse en la pila por sí mismo, por lo que generalmente se inserta el tipo más cercano al tamaño de palabra de la máquina, es decir int.

Como señala el enlace en el comentario de @ Gui13, hacer eso también aumenta el rendimiento.

Recuerda que puedes compartir este post si si solucionó tu problema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *