我的问题源于在尝试为多个位深度平台(例如 32/64)构建时尝试使用 printf 记录事物。
一个不断抬头的问题是试图在多个架构上打印整数。在 32 位上它会像
printf(" my int: %d\n", myInt);
但在 64 位上,它必须更改为
print (" my int: %ld\n", (long)myInt);
我有两个相关的问题:
我的第一个想法是,当您告诉 printf 打印一个变量并给它一个格式时,它会查看该变量的地址并获取该格式所需的尽可能多的字节。起初这似乎是一个大问题。例如,如果您有一个变量 myChar,它是一个 char(1 字节),但使用了 %d 格式说明符,这将告诉 printf 转到 myChar 的地址并获取接下来的 4 个字节以将其视为 int。如果是这种情况,似乎 printf 会从相邻变量中抓取垃圾日期(因为它抓取了 4 个字节,但实际值只有 1 个字节)。然而,情况似乎并非如此。通过使用 myChar 并指定 %d,printf 获取 1 个字节,然后用 0 填充高 3 个字节。我的理解在这里正确吗?
如果上述情况属实,那么总是将变量提升到最大值以避免在 32/64 位情况下出现的问题类型是否有任何真正的危害。例如,如果您有一个短变量 myShort 和一个 int 变量 myInt,那么始终将它们打印为:
printf("myShort %ld", (long)myShort); printf("myInt %ld", (long)myInt);
感谢您的任何澄清。