Description
It would be great if the Rust code generated by bindgen would keep the number bases of the integer literals in the input C and C++ code. After all, the writer of the C or C++ code probably had a good reason for using a specific radix.
C++14, C23, and Rust all support binary, octal, and hexadecimal base numbers, with C++14 and C23 sharing the same syntax. A one-to-one mapping with Rust seems to be possible.
For example, given the following code working in both C23 and C++14:
#define BIN_LIT 0b10
#define OCT_LIT 010
#define HEX_LIT 0x10
the generated Rust bindings would be:
pub const BIN_LIT: u32 = 0b10;
pub const OCT_LIT: u32 = 0o10;
pub const HEX_LIT: u32 = 0x10;
The bases of const
s and enum
s would be kept as well.
A bit of not too serious motivation
Just for the reference, if someone finds this interesting. I ran the following command in a fresh git clone of the Linux kernel repository, finding lines in .h
files only that have a #define
with a hexadecimal literal later on that line:
rg "\#define.+\b0x" --type h | wc -l
Currently, that's 4 519 652 such lines.