我正在尝试修复构建错误。
违规行代码如下:
fprintf(crashLog, "RIP: %lX\n", context->uc_mcontext.gregs[REG_RIP]);
因此:
现在这段代码(用于生成核心转储和堆栈跟踪)已经工作了很长时间,但最近,GCC 4.7.3(Ubuntu 13.04)已经开始拒绝它:
error: format ‘%lX’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘greg_t {aka long long int}’ [-Werror=format]
精细。所以我将违规行更改为:
fprintf(crashLog, "RIP: %llX\n", context->uc_mcontext.gregs[REG_RIP]);
但GCC 4.6.3(Ubuntu 12.04)反而抱怨:
error: format ‘%llX’ expects argument of type ‘long long unsigned int’, but argument 3 has type ‘greg_t {aka long int}’ [-Werror=format]
在这段代码中已经有ifdef用于各种寄存器,所以我可以添加另一个,但有一个很好的干净方法(特别是不需要额外的ifdef)吗?