Je souhaite utiliser la fonction htonl
dans mon extension ruby c, mais je ne souhaite pas utiliser d'autres éléments Internet qui l'accompagnent. Quel serait le fichier le plus minimaliste à #include
qui est encore portable? En regardant à travers les fichiers d'en-tête sur mon ordinateur, je peux voir que machine/endian.h
ou sys/_endian.h
me permet de les utiliser, même si je ne suis pas sûr que ce soit une bonne idée.Que dois-je # inclure pour utiliser 'htonl'?
Répondre
L'en-tête est standard:
#include <arpa/inet.h>
Vous n'avez pas à vous soucier de l'autre substance définie dans cet en-tête. Cela n'affectera pas votre code compilé, et devrait avoir seulement un effet mineur sur le temps de compilation.
EDIT: Vous pouvez tester ceci. Créez deux fichiers, 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);
}
et htonl_include.c:
// portable
#include <arpa/inet.h>
#include <stdio.h>
int main()
{
int x = 1;
x = htonl(x);
printf("%d\n", x);
}
les assembler à -O1, puis prendre la différence:
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
Pour moi, la seule différence est le nom de fichier
Si vous ne voulez rien inclure en rapport avec le réseau, il est parfaitement possible de déclarer vous-même htonl
. Juste #include <stdint.h>
pour obtenir uint32_t
et utiliser le prototype suivant:
uint32_t htonl(uint32_t);
Référence: Posix: http://www.opengroup.org/onlinepubs/9699919799/functions/htonl.html
Vous pouvez aussi implémenter votre propre par l'ordre des octets de test (à compiletime) à l'aide des syndicats. Cela ne nécessite aucune macros ENDIAN ou #ifdefs.
- 1. Java implémentant htonl
- 2. Rails comment utiliser Inclure
- 3. Est-ce que boost utilise de manière portable les fonctions de type ntohl/htonl/ntohs/htons?
- 4. Quel fichier d'en-tête dois-je inclure pour utiliser _swprintf_s()?
- 5. Comment utiliser javascript pour inclure des balises html tag?
- 6. Dois-je inclure le fichier jquery version pour utiliser jquery.ui.js?
- 7. Comment utiliser Inclure avec Lambda dans EF?
- 8. Utiliser str_replace et inclure ensemble (php)
- 9. Que utiliser pour Python string.find?
- 10. Quelles sont les DLL de Gallio que je dois inclure pour que TeamCity exécute les tests?
- 11. Que dois-je inclure (en utilisant maven) pour utiliser un référentiel de sésame intégré dans mon application Java?
- 12. Copier les fichiers C pour inclure
- 13. Que dois-je installer pour utiliser OraOLEDB
- 14. Que faut-il pour utiliser SSL?
- 15. Que dois-je coder pour utiliser HTTPS?
- 16. Que dois-je faire pour utiliser Guice?
- 17. Que utiliser pour écrire une interface utilisateur?
- 18. Requête Linq pour inclure un sous-type
- 19. Dois-je inclure comment utiliser la GPL dans COPYING?
- 20. Utilisation d'ObjectQuery Inclure et utiliser une clause where imbriquée
- 21. comment utiliser urlhelper pour inclure des rails 3 attribut de données personnalisé
- 22. Autre méthode pour inclure les fichiers JS
- 23. Inclure jQuery document.ready() en tant que fichier include
- 24. Peut-on utiliser la méthode Window.Onscroll pour inclure la détection de la direction de défilement?
- 25. En PHP quand est-ce que Inclure/Exiger est évalué?
- 26. Inclure le fichier HTML en tant que ressource incorporée
- 27. Que ne pas inclure dans le dépôt Git?
- 28. comment inclure un ":" en tant que paramètre dans powershell?
- 29. Inclure MSMQ comme prérequis pour mon application
- 30. Bonne pratique pour utiliser JavaScript?
Merci! Je ne savais pas que cela ne changerait pas le code compilé. Avant de répondre, je pensais écrire ma propre version juste pour que mon code reste petit. – Adrian