正如你所说,你可以使用z
修改:
#include <stdio.h>
size_t nodeID = 5;
printf("nodeID = %zu\n", nodeID);
但就像你说的IIRC这可能与旧的MS编译器的兼容性问题。您可能能够解决这个问题的东西,如:
#ifdef _MSC_VER /* Untested MSC detection */
#define PRIuSIZE Iu
#else
#define PRIuSIZE zu
#endif
#define QUOTE(name) #name
#define STR(macro) QUOTE(macro)
#define USIZE_STR STR(PRIuSIZE)
#include <stdio.h>
size_t nodeID = 5;
printf("nodeID = %" USIZE_STR "\n", nodeID);
另一种方式,它是独立在这个意义上,它并没有在您文件依赖条件预处理宏架构和操作系统,将是:
#include <stdio.h>
#include <inttypes.h>
size_t nodeID = 5;
printf("nodeID = %" PRIu64 "\n", (uint64_t) nodeID);
这显然依靠size_t
是小于或等于长度为64位,我相信它始终是。
如果在所有的CPU环境中'nodeID'确实具有相同的大小,会不会更好?你可以声明'uint64_t'或'uint32_t'这个程序不会改变行为,如果不希望它在x86和x64上运行不同的话。 –
你可以用10个分区编写自己的打印方法。 –
''%zu''格式应该是标准和独立的方式。不幸的是,Visual Studio C编译器不得不根据以下标准跳过。最后几个版本(2013和2015)应该具有完整的C99兼容性。 –