我在Win32 docs上发现了这个:
printf("Failed SCardIsValidContext - %x\n", lReturn);行将LONG类型的参数(long的typedef)传递给printf,其中printf根据cppreference.com期望unsigned int。这是定义明确的行为吗?如果是这样,是否与static_cast的显式unsigned int相同?

最佳答案


不,在C++中不行。 %x用于无符号int,时间不长。

不,这是不确定的行为。引用C标准草案(在其中定义格式说明符的地方):


如果系统有此说明,则在Windows中可能是“OK”,但依靠这种保证将无法移植到其他系统。我怀疑该示例并非旨在证明此类格式说明符被滥用的有效性,而是偶然的。

关于c++ - %x printf说明符的类型是否为long OK?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63453975/

10-11 16:13