Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Command line Can';t用C语言编译一个示例程序_Command Line_C - Fatal编程技术网

Command line Can';t用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

我知道用Java编程,但我正在读《C编程语言》,第二版。它说,要从命令行编译和运行程序,您必须执行以下操作:

$ 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;
    }