编译顺利,不运行,无输出(C)

我只是复制了Kernighan和Ritchie出版的“C编程语言 ”一书中一些示例程序。 这是它的一个例子,一个程序声称将输入的C字符串转换为其等效的浮点数:

#include  /* atof: convert string s to a double */ double atof(char s[]) { double val, power; int i, sign; for (i = 0; isspace(s[i]); i++); /* skip white spaces */ sign = (s[i] == '-') ? -1 :1; if (s[i] == '+' || s[i] == '-') i++; for (val = 0.0; isdigit(s[i]); i++) val = 10.0 * val + (s[i] - '0'); if (s[i] == '.') i++; for (power = 1.0; isdigit(s[i]); i++) { val = 10.0 * val + (s[i] - '0'); power *= 10.0; } return sign * val / power; } 

它确实编译但我相信它不会运行,因为没有任何反应。 当我尝试“运行”程序时,我收到了这个弹出消息:

源文件未编译

我哪里做错了?

此外,我从未看到书中显示的其他示例程序的输出。

主要function是每个应该运行自足的C程序的入口点。 您可以在维基百科上阅读有关它的内容 :

main()函数很特殊; 通常每个C和C ++程序必须只定义一次。

如果你正在编写一个库(Windows中的.dll或Linux中的.so ),你就不会提供一个main函数,因为你只是向其他程序员提供函数。 该库本身不是一个正在运行的程序。

在我的第二版书中,他们谈到了第6页的mainfunction。

提供以下内容,您将看到输出,您还必须包含#include

 int main() { /* declare variables and initialize some of them */ char doubleStr[] = "3.14"; double doubleVal; /* invoke your atof function */ doubleVal = atof(doubleStr); /* print output to console */ printf("The string \"%s\" is converted to: %f", doubleStr, doubleVal); return 0; } 

您的代码中没有main()函数。 这就是你收到通知的原因。 在C语言中,您的程序必须具有编译和运行的主函数。 任何程序的编译都从main开始。 书中的例子一般只有所需function的代码而不是主要function,他们假设你了解c语言的基础知识。

在代码中添加以下行,它将起作用。

 int main(void) { double a = atof("20"); printf("%f", a); return 0; }