【发布时间】:2014-01-02 15:46:45
【问题描述】:
我经常尝试使用最近的 GCC 构建许多旧的模拟器以及磁盘和磁带存档工具。有些错误很容易修复,但我不是一个很好的程序员。
我明白了:
itstar.c:在函数“addfiles”中:
itstar.c:194:4:警告:格式“%d”需要“int”类型的参数,但参数 2 的类型为“long unsigned int”[-Wformat]
itstar.c:194:4:警告:格式“%d”需要“int”类型的参数,但参数 3 的类型为“long unsigned int”[-Wformat]
来自此代码片段:
/* add files to a DUMP tape */
/* output buffer must have been initialized with resetbuf() */
static void addfiles(int argc,char **argv)
{
int c=argc;
char **v=argv;
while(c--) {
addfile(argc,argv,*v++);
}
if(verify)
printf("Approximately %d.%d' of tape used\n",count/bpi/12,
(count*10/bpi/12)%10);
}
第 194 行是倒数第三行,从 printf 开始。
文件是itstar.c,来自tapetools,代码here。
尽管有警告,但我更愿意知道如何防止它,
所以结果更有效,数据损坏的可能性更小。
请问,我错过了什么,需要改变吗?
提前谢谢你。
【问题讨论】:
-
现在我真的不明白这个。我再次运行 make,它没有错误地构建。
-
它来自什么平台?检查 printf 参数是编译器的最新功能,
int和long在许多平台上具有相同的大小,尤其是在 Win32 上。 -
我需要查找它编写的原始平台。我正在 Ubuntu 13.04 上构建。感谢您这么快回复。
-
@Kuze:Make 可能第二次没有重新编译文件。
-
@Kuze 也有相关的目标文件?
标签: c unix gcc printf undefined-behavior