【发布时间】:2020-10-24 15:06:46
【问题描述】:
我有以下两个函数,编译时遇到标题错误。
double getIdf(FileList fl, int D){
double fileCount = countFiles(fl); //todo countfiles
double temp = fileCount/D;
double idf = log10(temp);
return (fabs(idf));
}
double countFiles(FileList fl){
if (fl == NULL){
printf("countFiles FL does not exist\n");
return 0;
}
double count = 0;
FileList curr = fl;
while (curr != NULL) {
count++;
curr = curr->next;
}
return count;
}
但是,如果我将 log10 函数更改为 log10(5.5) 它将起作用。
double getIdf(FileList fl, int D){
double fileCount = countFiles(fl); //todo countfiles
double temp = fileCount/D;
double idf = log10(5.5);
return (fabs(idf));
}
我正在使用 -lm 进行编译。
这里有什么问题?
【问题讨论】:
-
发布您用于链接的确切命令行。如果是
gcc -lm foo.c,那是你的问题;-lm需要放在最后。见stackoverflow.com/questions/45135/… -
你修改后的版本不同可能是当参数为常量时,编译器可以在编译时计算
log10(5.5),根本不需要调用库函数。 -
可能缺少一些包含文件? (至少从您发布的代码中)
-
@NateEldredge 是的,将 -lm 移动到最后有效。这是为什么?如何更改代码以便不必将 -lm 移到后面进行编译?
-
阅读我之前评论中的链接。