我的代码中定义了一个依赖于平台的类型:
typedef uint64_t myType;
但是在一些更有限的平台上,它可能是32位.
我怎么printf了?就像在目前的情况下,我可以使用%llu,但如果在另一个平台上它是32位,这不是最好的主意.
我想过使用一些宏,但有人会知道更好的方法吗?我很想知道一些格式说明符,例如可以从下一个参数中获取长度.
由于您具有特定于平台的类型,因此使用特定于平台的格式字符串也应该很容易,例如:
#ifdef USING_64_bits
typedef uint64_t myType;
#define MY_TYPE_FMT PRIu64
#else
typedef uint32_t myType;
#define MY_TYPE_FMT PRIu32
#endif
Run Code Online (Sandbox Code Playgroud)
然后你可以用它:
myType var1 = 42, var2 = 99;
printf ("%6" MY_TYPE_FMT ", %019" MY_TYPE_FMT "\n", var1, var2);
Run Code Online (Sandbox Code Playgroud)
%从格式字符串中提取允许您动态插入其他格式说明符,例如字段宽度和填充字符.
您还会注意到我已经避免使用%llu-style格式说明符,您应该使用更具针对性的格式说明符,inttypes.h因为实现将为您提供正确的类型.
只需将其转换为与所需符号匹配的最大可能整数类型,并使用以下格式:
printf("%jd", (intmax_t)x);
Run Code Online (Sandbox Code Playgroud)
或者:
printf("%ju", (uintmax_t)x);
Run Code Online (Sandbox Code Playgroud)
(问题标题要求签名,但正文使用未签名的示例,因此我已经介绍了两者。)
与使用其他答案中建议的宏相比,这要丑陋得多/更具可读性,并且也适用于您本质上不知道要使用的PRI*正确宏的类型,例如.PRIoff_t
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |