format指定类型'unsigned long long'但参数的类型为'unsigned int'

时间:2014-09-25 18:38:42

标签: c++

我正在编写一些C ++代码,我在编译时收到警告。我知道它并没有真正影响最终结果,但我希望代码尽可能干净,警告是:

src/main.cpp:1908:136: warning: format specifies type 'unsigned long long' but the argument has type 'unsigned int' [-Wformat]
  ...: Rejected by stake modifier checkpoint height=%d, modifier=0x%016"PRIx64, pindexNew->nHeight, pindexNew->nStakeModifierChecksum);
                                                                   ~~~~~                            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

有问题的代码是:

    uint64_t nStakeModifier = 0;
    bool fGeneratedStakeModifier = false;
    if (!ComputeNextStakeModifier(pindexNew->pprev, nStakeModifier, fGeneratedStakeModifier))
        return error("AddToBlockIndex() : ComputeNextStakeModifier() failed");
    pindexNew->SetStakeModifier(nStakeModifier, fGeneratedStakeModifier);
    pindexNew->nStakeModifierChecksum = GetStakeModifierChecksum(pindexNew);
    if (!CheckStakeModifierCheckpoints(pindexNew->nHeight, pindexNew->nStakeModifierChecksum))
        return error("AddToBlockIndex() : Rejected by stake modifier checkpoint height=%d,  modifier=0x%016"PRIx64, pindexNew->nHeight, pindexNew->nStakeModifierChecksum);

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

你有一些printf() - 类似的代码,其中格式字符串中的占位符与相应的值不匹配。您必须更改它们中的任何一个才能匹配。

那就是说,请将来自己做一些研究并提供一个最小的例子。如果您不提供有关pindexNew->nStakeModifierChecksumerror()的信息,有谁应该分析问题?