我有一个OpenGL调用的“facade”设计模式,它将调用路由到相应的OpenGL调用。我可以另外(但可选)打印出所有OpenGL调用及其参数值,这对调试很有用。但是,对于采用GLuint64
参数(例如glClientWaitSync
)的方法,我不确定要使用哪种printf
格式。我专门针对Windows使用MSVC和Linux使用GCC和clang。
%lld
适用于MSVC,但会使用GCC / clang生成警告。 (warning: format ‘%lld’ expects argument of type ‘long long int’, but argument 6 has type ‘GLuint64 {aka long unsigned int}
)%lu
适用于GCC / clang(在x64_86中),但不会在MSVC上引起警告。但是,它无法正确打印(解释为32位整数)。我是不是为编译器做了#ifdef
来制作正确的格式字符串,还是有更智能/更简单的方法来做这件事?
注意:这与如何打印int64_t
并不重复,因为GLuint64被定义为标准glext.h标头顶部的不同具体类型。
答案 0 :(得分:2)
答案很简单:不。
如果你想打印GLuint64
,那么首先将它转换为明确定义的C ++类型,例如unsigned long long
。由于OpenGL规范要求输入类型的大小正好为64位,而C规范(因此包含C ++)要求<{1}} 至少为64 -bits的大小,转换应该是无损的。