我有一个类型的变量size_t,我想用它打印printf().我使用什么格式说明符来便携地打印它?
在32位机器上,%u似乎是对的.我编译了g++ -g -W -Wall -Werror -ansi -pedantic,并没有警告.但是当我在64位机器中编译该代码时,它会产生警告.
size_t x = <something>;
printf( "size = %u\n", x );
warning: format '%u' expects type 'unsigned int',
but argument 2 has type 'long unsigned int'
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,警告会消失,如果我将其更改为%lu.
问题是,如何编写代码,以便在32位和64位机器上编译警告?
编辑:作为一种解决方法,我想一个答案可能是将变量"转换"为一个足够大的整数,比如说unsigned long,并使用打印%lu.这在两种情况下都有效.我在寻找是否还有其他想法.
Size_t被定义为一个unsigned整数,但它的大小取决于你是在32位还是64位机器上.什么是正确和便携的打印方式size_t?
我想在C++中使用Microsoft Visual Studio 2010 打印出size_t变量的值printf(我想使用printf而不是<<在这段特定的代码中,所以请不要回答告诉我应该使用它<<).
根据帖子
正确的平台无关方式是使用%zu,但这似乎在Visual Studio中不起作用.Visual Studio文档
http://msdn.microsoft.com/en-us/library/vstudio/tcxf1dw6.aspx
告诉我,我必须使用%Iu(使用大写i,而不是小写l).
微软是否不遵守这些标准?或者自C99以来标准是否已更改?或者C和C++之间的标准是不同的(这对我来说似乎很奇怪)?
在跨平台的c/c ++项目(Win32,Linux,OSX)中,我需要使用*printf函数来打印一些size_t类型的变量.在某些环境中,size_t是8个字节,而在其他环境中它们是4.在glibc上我有%zd,在Win32上我可以使用%Id.有一种优雅的方式来处理这个问题吗?
我正在尝试在RHEL 5.6,64位上编译以下内容,并且我不断收到警告
"var.c:7:警告:格式'%d'需要类型'int',但参数2的类型为'long unsigned int'"
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned int n =10;
printf("The size of integer is %d\n", sizeof(n));
}
Run Code Online (Sandbox Code Playgroud)
如果我将"n"的声明更改为以下内容并不重要
我想要做的就是在我的机器上打印整数的大小,而不是真正关注limits.h.
假设您有以下代码片段:
include <stdio.h>
size_t nodeID = 5;
printf("nodeID = %lu", nodeID);
Run Code Online (Sandbox Code Playgroud)
这将在64位系统上没有任何警告的情况下运行,但会在32位系统上生成%lu的转换警告.
我们可以使用%z修饰符来处理它
但是,这对使用"I"修饰符的Visual Studio不起作用.
有没有可用的方法以独立于体系结构和独立于操作系统的方式解决这个问题?