Command line Can';t用C语言编译一个示例程序
我知道用Java编程,但我正在读《C编程语言》,第二版。它说,要从命令行编译和运行程序,您必须执行以下操作:Command line Can';t用C语言编译一个示例程序,command-line,c,Command Line,C,我知道用Java编程,但我正在读《C编程语言》,第二版。它说,要从命令行编译和运行程序,您必须执行以下操作: $ cc hello.c //assuming the name of the file is hello.c ./a.out 并且打印了hello world。我试过了,效果很好 现在,有另一个例子显示了一系列摄氏和华氏温度,所以我用给定的代码创建了一个名为TemperatureConverter.c的文件。但是,在命令行中,当我运行时: $ cc TemperatureConv
$ cc hello.c //assuming the name of the file is hello.c
./a.out
并且打印了hello world
。我试过了,效果很好
现在,有另一个例子显示了一系列摄氏和华氏温度,所以我用给定的代码创建了一个名为
TemperatureConverter.c
的文件。但是,在命令行中,当我运行时:
$ cc TemperatureConverter.c
我有一个错误:
/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../../../../../../lib64/crt1.o:在函数“u start”中:
(.text+0x20):未定义对“main”的引用collect2:错误:ld返回了1个退出状态 我不知道这是什么意思。我试着仔细检查我的语法,它看起来是正确的。我将给定代码的屏幕截图与我编写的代码进行了比较,以防任何人注意到可能导致错误的差异:
#包括
main()
{
浮法儿,塞尔西乌斯;
int下、上、台阶;
下限=0;
上限=300;
步骤=20;
fahr=较低;
而(fahr我只是使用相同的命令在cygwin中运行了您的代码,它编译/运行得很好。我会说其他人提到的同样的话
main的返回类型为int
它的参数应该是(void)或(intargc,**intargv)。
您可以使用main(),但这允许将任何参数传递到main函数中
第三,主函数应该以返回0结束;
这表明程序已正确退出
最后应该是这样的
#include <stdio.h>
int main(void)
{
float fahr, celcius;
int lower, upper, step;
lower = 0;
upper = 300;
step = 20;
fahr = lower;
while (fahr <= upper) {
celcius = (5.0/9.0) * (fahr - 32.0);
printf("%3.0f %6.1f\n", fahr, celcius);
fahr = fahr + step;
}
return 0;
}
#包括
内部主(空)
{
浮法儿,塞尔西乌斯;
int下、上、台阶;
下限=0;
上限=300;
步骤=20;
fahr=较低;
虽然(fahr你的代码绝对没有语法上的错误。尽管FrozenHawk建议的修改是个好主意。我注意到链接器错误提到了函数\u start
中对main
的未定义引用。我甚至从未听说过函数\u start
作为c文件的起点;不过这可能是标准中没有严格规定的特定于编译器的内部内容
您应该绝对确定您正在尝试编译正确的文件。在同一个参数上使用cat
以获得额外的保证。您的代码对我来说编译得很好,正如您在Debian上使用的命令一样。这似乎不太可能,但这可能是gcc的问题。在我的机器上,没有任何名为\u start
的函数出现在任何文件在<代码> /Ur/Copy/< /代码>中,这意味着一些较低的级别。你可以考虑卸载和重新安装作为最后的手段。< /P>我刚刚编译了你的代码。它工作得很好。你使用了我用来编译和运行它的相同命令吗?试着得到那本书的第二版。第一版是在第一个C标准之前写的。d已经出版,包含了一些不再有效的东西。(第二版仍然有一些错误,但不太多)。我之前发布了一个答案,但使用int main
似乎不是问题。请确保键入的所有内容都正确,如果可能,发布您的原始代码,而不是书籍main
中包含所需参数的图片(int argc,char**arg)
(尽管它们可以命名为任何名称)main
的类型是'int'
,因此必须返回一个值,无论使用什么MS,都可以(return0;
可以)。如果您有一个简短的代码段,并且不打算提供所需的声明,至少要明确声明(例如intmain(void)
)C标准规定,return 0;
对于main
是隐含的,即使它没有显式出现。这只是c99 iirc的情况。我在c89中完成了所有的C编译(包括这个)
#include <stdio.h>
int main(void)
{
float fahr, celcius;
int lower, upper, step;
lower = 0;
upper = 300;
step = 20;
fahr = lower;
while (fahr <= upper) {
celcius = (5.0/9.0) * (fahr - 32.0);
printf("%3.0f %6.1f\n", fahr, celcius);
fahr = fahr + step;
}
return 0;
}