sintaxis referencia por paso parametros locales globales funciones estructuras ejercicios ejemplos c server client-server recvfrom

referencia - sizeof() c++



¿Cuál es la diferencia, pasar directamente sizeof() en la función y una variable declarada e inicializada anterior? (2)

Sí, hay una diferencia significativa.

  • Para el primer caso, está pasando la dirección de un unsigned int , básicamente un insigned int * .

  • En el segundo caso, está pasando el resultado del operador sizeof , de tipo size_t .

Ellos no son los mismos.

Dicho esto, según la página del manual , básicamente, ambos no son correctos. El último argumento debe ser de tipo socklen_t * , por lo que es mejor que se adhiera a los tipos correctos.

Por ejemplo, me gustaría saber si hay alguna diferencia significativa o buena / mala práctica

Haciendo de esta manera:

unsigned int length_addr; length_addr = sizeof(cli_addr); nbytes = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&cli_addr, &length_addr);

y de esta manera:

nbytes = recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr *)&cli_addr, sizeof(cli_addr));


En realidad hay una diferencia. Como alguien dijo, hay una gran diferencia entre pasar una dirección (primera situación) o un valor (tamaño_t) (segunda situación). Si revisa la referencia manual de recv, puede ver que el último argumento es un puntero a un espacio de memoria que tiene el tamaño de sockaddr del argumento anterior.

#include <sys/socket.h> ssize_t recvfrom(int socket, void *buffer, size_t length, int flags, struct sockaddr *address, socklen_t *address_len); /*address_len Specifies the length of the sockaddr structure pointed to by the address argument.*/

El primero es en realidad correcto ya que le está dando al lenght_addr el tamaño del cli_addr y luego pasa el puntero como argumento. Entonces debería funcionar bien.