Tôi muốn sử dụng chức năng htonl
trong tiện ích mở rộng ruby c của mình, nhưng không muốn sử dụng bất kỳ nội dung nào khác trên internet đi kèm với nó. Điều gì sẽ là tập tin tối giản nhất để #include
vẫn còn di động? Nhìn qua các tệp tiêu đề trên máy tính của tôi, tôi có thể thấy rằng machine/endian.h
hoặc sys/_endian.h
sẽ cho phép tôi sử dụng chúng, mặc dù tôi không chắc đó có phải là một ý tưởng hay hay không.Tôi nên # bao gồm để sử dụng 'htonl'?
Trả lời
Tiêu đề standard là:
#include <arpa/inet.h>
Bạn không cần phải lo lắng về những thứ khác quy định tại tiêu đề đó. Nó sẽ không ảnh hưởng đến mã được biên dịch của bạn và chỉ nên có một hiệu ứng nhỏ trong thời gian biên dịch.
EDIT: Bạn có thể kiểm tra điều này. Tạo hai tập tin, 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);
}
và htonl_include.c:
// portable
#include <arpa/inet.h>
#include <stdio.h>
int main()
{
int x = 1;
x = htonl(x);
printf("%d\n", x);
}
Lắp ráp chúng tại -O1, sau đó đi sự khác biệt:
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
Đối với tôi, sự khác biệt duy là tên tệp.
Nếu bạn không muốn bao gồm bất kỳ điều gì liên quan đến mạng, bạn hoàn toàn tự khai báo số htonl
. Chỉ cần #include <stdint.h>
để có được uint32_t
và sử dụng nguyên mẫu sau:
uint32_t htonl(uint32_t);
tham khảo: POSIX: http://www.opengroup.org/onlinepubs/9699919799/functions/htonl.html
Bạn cũng có thể chỉ thực hiện riêng của bạn bằng cách tự kiểm tra byte (tại compiletime) sử dụng các công đoàn. Điều này không yêu cầu bất kỳ macro ENDIAN lẻ hoặC#ifdefs nào.
- 1. Tôi nên bao gồm normalize.css ở đâu?
- 2. Tôi nên sử dụng bao nhiêu hoạt động?
- 3. Bao gồm các file JS trong một file xhtml được bao gồm sử dụng ui: bao gồm
- 4. Bao gồm PHP Defines() sử dụng Composer
- 5. Sử dụng đếm XPath() bằng bao gồm()
- 6. Bao gồm sử dụng Lambda biểu
- 7. Sử dụng XSD với bao gồm
- 8. bao gồm ggmap sử dụng knitr
- 9. Sử dụng biến trong Jade bao gồm
- 10. kéo sử dụng git bao gồm submodule
- 11. nên encodeURI bao giờ được sử dụng?
- 12. Ánh sáng màu nền hộp nên bao gồm toàn bộ màn hình sử dụng CSS
- 13. Mức độ chi tiết của trường hợp sử dụng. Nên sắp xếp/tìm kiếm nên được bao gồm?
- 14. Tôi có cần bao gồm tệp phiên bản jquery để sử dụng jquery.ui.js không?
- 15. Bao gồm một thư mục sử dụng Pyinstaller
- 16. JSP bao gồm các thông số sử dụng
- 17. Không nên "nhập foo. *" Cũng bao gồm gói phụ "foo.bar. *"?
- 18. Các tệp Javascript có nên bao gồm BOM hay không?
- 19. Tôi có nên bao gồm thẻ <meta generator> không?
- 20. bao gồm plugin jpeg trong ứng dụng của tôi
- 21. Tôi làm cách nào để bao gồm System.Windows.Shapes?
- 22. Nên autogen.sh được bao gồm trong một tarball?
- 23. Sử dụng Rsync bao gồm và không bao gồm tùy chọn để bao gồm thư mục và tập tin bằng mẫu
- 24. Hibernate: Tôi có nên bao gồm trường 'phiên bản' thành phương thức hashcode() và equals()
- 25. Mảng rspec nên bao gồm như thế nào? một mảng
- 26. Bao gồm toàn bộ thư mục trong PHP hoặc Wildcard để sử dụng trong PHP Bao gồm?
- 27. tôi nên sử dụng RoutedEventHandler
- 28. include() Tại sao tôi không nên sử dụng?
- 29. JSON có nên bao gồm các giá trị rỗng không
- 30. Sử dụng Rcpp với Windows cụ thể bao gồm
Cảm ơn! Tôi không biết rằng nó sẽ không thay đổi mã được biên dịch. Trước khi bạn trả lời, tôi đã xem xét việc viết phiên bản của riêng mình để mã của tôi có thể ở mức nhỏ. – Adrian