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.