Tôi có một số mã C ++ in ra size_t
:
size_t a;
printf("%lu", a);
Tôi muốn điều này được biên dịch mà không có cảnh báo trên cả kiến trúc 32-bit và 64-bit.
Nếu đây là C99, tôi có thể sử dụng printf("%z", a);
. Nhưng AFAICT %z
không tồn tại trong bất kỳ phương ngữ C ++ chuẩn nào. Vì vậy, thay vào đó, tôi phải làm
printf("%lu", (unsigned long) a);
mà thực sự là xấu xí.
Nếu không có tiện ích nào để in size_t
được tích hợp sẵn trong ngôn ngữ, tôi tự hỏi liệu có thể viết một trình bao bọc printf hoặc somes như vậy sẽ chèn các phôi thích hợp vào size_t
để loại bỏ các cảnh báo trình biên dịch giả trong khi vẫn duy trì các phôi tốt hay không.
Bất kỳ ý tưởng?
Chỉnh sửa Để làm rõ lý do tại sao tôi sử dụng printf: Tôi có một cơ sở mã tương đối lớn mà tôi đang dọn dẹp. Nó sử dụng trình bao bọc printf để thực hiện những việc như "viết cảnh báo, đăng nhập vào tệp và có thể thoát mã khi gặp lỗi". Tôi có thể tập hợp đủ C ++ - foo để làm điều này với trình bao bọc cout, nhưng tôi không muốn thay đổi mọi lệnh gọi warning () trong chương trình chỉ để loại bỏ một số cảnh báo trình biên dịch.
"%l"
? Đó sẽ không phải là luôn luôn đúng kích thước? Hay tính di động có quan trọng không?