Macros之PRId64

访问特定宽度整型数据时常会遇到类似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;
}

  

原文地址:https://www.cnblogs.com/yemaomao/p/12470426.html