我的问题源于在尝试构建多个位深度平台(例如32/64)时尝试使用printf来记录事物.
一直在养成丑陋头脑的问题是试图在多种体系结构上打印.在32位上它会是这样的
printf(" my int: %d\n", myInt);
Run Code Online (Sandbox Code Playgroud)
但在64位上,它必须改为
print (" my int: %ld\n", (long)myInt);
Run Code Online (Sandbox Code Playgroud)
我有两个相关的问题:
我的第一个想法是,当你告诉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);
谢谢你的任何澄清.