2017-01-03 13 views
6

Là một người sử dụng GCC, tôi vừa nhận thấy clang hỗ trợ một loại uint24_t (dù sao cũng trong số stdint.h).Làm thế nào để uint24_t của clang hoạt động? Tôi có thể sử dụng nó bên ngoài clang/LLVM?

Cách thức hoạt động? Tôi có nghĩa là, nó được hỗ trợ hoàn toàn nội bộ, như là một phần mở rộng ngôn ngữ, hoặc là nó thực hiện như một lớp C++, với một số trừu tượng hơn 3 byte hoặc một giá trị 16-bit và một giá trị 8-bit? Và - làm thế nào có thể là nó 'yank' như một thực hiện và sử dụng nó bản thân mình, với GCC?

Lưu ý:

  • tôi đang tìm cách để có một lớp uint24_t giống như trong C++ hiện đại (hoặc một uint_t<N> tổng quát hơn); lựa chọn thay thế của tôi là của riêng tôi.
  • Bạn có thể s/uint/int/g; nếu bạn thích trong câu hỏi này.
+0

Tôi đang trên x86-64, Clang 3.9. 1, và grepping thông qua thư mục bao gồm chỉ mang lại kết quả cho tăng. Hãy báo cáo hệ thống của bạn. – Downvoter

+0

@Downvoter: Tôi thấy nó [ở đây] (http://clang.llvm.org/doxygen/stdint_8h-source.html) thực sự. Và - đó là một biệt danh đáng sợ mà bạn có. – einpoklum

Trả lời

3

Đây không phải là thiết bị di động hoặc tiêu chuẩn. Nó chỉ tồn tại cho AVR (có địa chỉ 24 bit) và GCC has it for that architecture, too (kể từ GCC v4.7).

Nếu kiến ​​trúc không hỗ trợ số nguyên gốc 24 bit, thì nó sẽ không được xác định.

Nếu bạn nhìn vào Clang's stdint.h header file, bạn sẽ thấy rằng typedefs số nguyên 24-bit đang có điều kiện bao gồm chỉ khi biểu tượng nội __INT24_TYPE__ được định nghĩa:

#ifdef __INT24_TYPE__ 
typedef __INT24_TYPE__ int24_t; 
typedef __UINT24_TYPE__ uint24_t; 
typedef int24_t int_least24_t; 
typedef uint24_t uint_least24_t; 
typedef int24_t int_fast24_t; 
typedef uint24_t uint_fast24_t; 
# define __int_least16_t int24_t 
# define __uint_least16_t uint24_t 
# define __int_least8_t int24_t 
# define __uint_least8_t uint24_t 
#endif /* __INT24_TYPE__ */ 
+0

Tôi không chắc làm thế nào "bản địa" số nguyên 24 bit là cho AVR, IIRC AVR có 8bit đăng ký, và số học 24 bit được thực hiện tương tự như __int128 trên x86_64, không? –

+0

Tôi không thực sự chắc chắn cách nó được triển khai, @marc, nhưng AVR sử dụng các giá trị 24 bit cho các địa chỉ, vì vậy cần phải có một số cách để biểu diễn các giá trị đó. Nó có lẽ không phải mô phỏng các phép toán số học, vì các thanh ghi chỉ có chiều rộng 8 bit. –

Các vấn đề liên quan