Saltar al contenido

¿Por qué debería declarar una C? array el tamaño del parámetro en un encabezado de función?

Deseamos darte la mejor respuesta que hallamos online. Queremos que te sirva de ayuda y si puedes comentarnos cualquier detalle que nos pueda ayudar a crecer hazlo con total libertad.

Solución:

¿Alguien puede aclararme por qué debería molestarme en especificar el tamaño de una C? array argumento en un encabezado de función? Por ejemplo:

void foo (const char sz[6]) talla[42] = 43;

En mi opinión, no deberías. Cuando intentas pasar un array a una función, lo que realmente pasa es un puntero al comienzo de la array. Dado que lo que recibe la función será un puntero, es mejor escribirlo para hacerlo explícito:

void foo(char const *sz)

Luego, dado que ahora está claro que a la función no se le ha dado ninguna pista del tamaño, agréguelo como un parámetro separado:

void foo(char const *sz, size_t size)

La única razón significativa para hacerlo es con fines de documentación: decirles a los futuros usuarios que las funciones esperan recibir una array de al menos esa cantidad de elementos. Pero incluso eso es una cuestión de convención, algo que debe acordar con otros usuarios de antemano. El lenguaje (el compilador) ignora ese tamaño de todos modos. Su declaración de función es equivalente a void foo(int iz[]) y para void foo(int *iz).

La única manera de hacer que tenga algo de sentido para el compilador es declararlo como

void foo (int iz[static 6])

que actúa como una promesa al compilador de que el array tendrá al menos 6 elementos, lo que significa que el compilador podrá optimizar ese código usando esa suposición. Además, si realmente desea adoptar la convención mencionada anteriormente, tiene más sentido declarar array tamaños de parámetros con static específicamente, ya que el lenguaje define explícitamente la semántica de esta construcción.

Lo que quiere decir con “obtenemos un error útil” no me queda claro. El código

int is[2] = 1,2,3;
is[42] = 42;

no contiene ninguna violación de restricción. Produce un comportamiento indefinido, pero no es necesario que produzca un mensaje de diagnóstico durante la compilación. En otras palabras, no, no obtenemos ningún “error útil” de esto.

es un comentario Las matrices se degradan a punteros en los parámetros de función. Sin embargo, los comentarios aún pueden ser útiles, incluso si el compilador no los lee.

Si sostienes alguna cuestión o capacidad de regenerar nuestro crónica puedes realizar un paráfrasis y con placer lo interpretaremos.

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



Utiliza Nuestro Buscador

Deja una respuesta

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