正如你所說,你可以使用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兼容性。 –