访问特定宽度整型数据时常会遇到类似PRId32、PRId64。比较常见的如流媒体处理中的时间戳。
以下的这些宏可扩展为基于特定宽度的整型类型包含相应printf或者scanf格式化的字符串
头文件:<inttypes.h>

下面以一个使用中的例子来真切的认识PRId64这种宏的使用
例子1
#include <stdio.h>
#include <stdint.h>
#include <inttypes.h> /* strtoimax, PRIdMAX, SCNdMAX */
int main ()
{
char buffer[80];
intmax_t foo,bar;
printf ("Please, enter a number: ");
fgets (buffer,80,stdin);
foo = strtoimax (buffer,NULL,10);
printf ("Thanks for entering %" PRIdMAX ".
", foo);
printf ("Please, enter another number: ");
scanf ("%" SCNdMAX,&bar);
printf ("%" PRIdMAX " by %" PRIdMAX " is %" PRIdMAX, foo, bar, foo*bar);
return 0;
}
结果输出:

例子2: 打印时间戳
//代码摘自Android开源
std::unique_ptr<AutoConditionLock> AutoConditionLock::waitAndAcquire(
const std::shared_ptr<WaitableMutexWrapper>& manager, nsecs_t waitTime) {
if (manager == nullptr || manager->mMutex == nullptr) {
return std::unique_ptr<AutoConditionLock>{nullptr};
}
std::unique_ptr<AutoConditionLock> scopedLock(new AutoConditionLock(manager));
nsecs_t failTime = systemTime(SYSTEM_TIME_MONOTONIC) + waitTime;
while (manager->mState) {
status_t ret = manager->mCondition.waitRelative(*(manager->mMutex), waitTime);
if (ret != NO_ERROR) {
return std::unique_ptr<AutoConditionLock>{nullptr};
}
waitTime = failTime - systemTime(SYSTEM_TIME_MONOTONIC);
}
//这里是自己加的调试输出,获取lock的等待时间
ALOGE("%s[%d] acquire mServiceLock wait:%" PRId64 "ns", __func__, __LINE__, waitTime);
manager->mState = true;
scopedLock->mAcquired = true;
return scopedLock;
}