¿Qué debo #incluir para usar htonl?

¿Qué debo #incluir para usar htonl?


Quiero usar el htonl funciona en mi extensión ruby ​​c, pero no quiero usar ninguna de las otras cosas de Internet que vienen con él. ¿Cuál sería el archivo más minimalista para #include sigue siendo portatil? Mirando a través de los archivos de encabezado en mi computadora, puedo ver que machine/endian.h o sys/_endian.h me dejaría usarlos, aunque no estoy seguro de si es una buena idea.


Respuestas:


El encabezado estándar es:


#include <arpa/inet.h>

No tiene que preocuparse por las otras cosas definidas en ese encabezado. No afectará su código compilado y solo debería tener un efecto menor en el tiempo de compilación.


EDITAR:Puedes probar esto. Cree dos archivos, htonl_manual.c


// non-portable, minimalistic header
#include <byteswap.h>
#include <stdio.h>
int main()
{
int x = 1;
x = __bswap_32(x);
printf("%d\n", x);
}

y htonl_include.c:


// portable
#include <arpa/inet.h>
#include <stdio.h>
int main()
{
int x = 1;
x = htonl(x);
printf("%d\n", x);
}

Ensámblelos en -O1, luego tome la diferencia:


gcc htonl_manual.c -o htonl_manual.s -S -O1
gcc htonl_include.c -o htonl_include.s -S -O1
diff htonl_include.s htonl_manual.s

Para mí, la única diferencia es el nombre del archivo.