C++ GLuint64的平台无关printf格式?

C++ GLuint64的平台无关printf格式?,c++,opengl,C++,Opengl,我有一个OpenGL调用的“facade”设计模式,它将调用路由到相应的OpenGL调用。我还可以(但可以选择)打印出所有OpenGL调用及其参数值,这对调试非常有用。但是,对于采用GLuint64参数的方法(例如),我不确定使用哪种printf格式。我的目标是使用MSVC的Windows和使用GCC和clang的Linux %lld与MSVC配合使用,但会生成带有GCC/clang的警告。(警告:格式'%lld'要求参数类型为'long long int',但参数6的类型为'GLuint64

我有一个OpenGL调用的“facade”设计模式,它将调用路由到相应的OpenGL调用。我还可以(但可以选择)打印出所有OpenGL调用及其参数值,这对调试非常有用。但是,对于采用
GLuint64
参数的方法(例如),我不确定使用哪种
printf
格式。我的目标是使用MSVC的Windows和使用GCC和clang的Linux

  • %lld
    与MSVC配合使用,但会生成带有GCC/clang的警告。(
    警告:格式'%lld'要求参数类型为'long long int',但参数6的类型为'GLuint64{aka long unsigned int}
  • %lu
    适用于GCC/clang(在x64_86中),但不会在MSVC上引起警告。但是,它不能正确打印(解释为32位整数)
我是否一直在为编译器执行
#ifdef
以生成正确的格式字符串,还是有更聪明/更简单的方法来实现这一点


注意:这不是如何打印
int64\t
的重复,因为GLuint64被定义为标准glext.h标题顶部的不同具体类型。

这里的答案很简单:不要


如果您想打印一个代码> Galutt64 ,那么首先将其转换成一个定义良好的C++类型,如<代码>未签名的长long < /C>。由于OpenGL规范要求输入类型的大小正好为64位,而C规范(因此包括C++)要求输入类型的大小至少为64位,因此转换应该是无损的。

这里的答案很简单:不要


如果您想打印一个代码> Galutt64 ,那么首先将其转换成一个定义良好的C++类型,如<代码>未签名的长long < /C>。由于OpenGL规范要求输入类型的大小正好为64位,而C规范(因此包括C++)要求输入类型的大小至少为64位,因此转换应该是无损的。

可能重复@BDL-请参阅底部的说明,它不是重复的。它实际上可以是四种类型中的一种:
无符号长整型
无符号长整型
无符号整型
无符号整型
。这些复制品在各自的系统上对它们都有效。(使用gcc、clang和vc++测试)。可能重复@BDL-请参阅底部的说明,它不是重复的。它实际上可以是四种类型之一:
无符号长整型
无符号长整型
无符号长整型64
uint64
。这些复制品在各自的系统上对它们都有效。(使用gcc、clang和vc++测试)。