11

我想知道为什么我的 C 程序不打印任何信息。我是 100% 的编程新手,在过去的几周里,我已经能够在 Ruby 和 Python 中学习一些东西,但是我对 C 的东西一无所知。这是每个人首先学习的总基线简单程序:

#include <stdio.h>

int main()

    {
        printf("Hello World\n");
        return 0;
    }

所以我已经写好了,我保存为 hello.c。现在我 cd 到它所在的目录,然后我尝试

gcc hello.c

什么也没有发生 - 没有错误,什么都没有。如果我改写

gcc hello.c -o hello

一个新的可执行文件被写入我的目录,当我打开它时,它看起来像普通的命令行,并且写有“Hello World”,正如我第一次在终端中所期望的那样。

我也尝试让 hello.c 本身成为可执行文件,但是当我这样做时,我得到了

syntax error near unexpected token `('
`int main()'
4

7 回答 7

17

当您键入

gcc hello.c

什么也没有发生,这是意料之中的。或者更准确地说,GCC 将使用默认名称编译一个可执行文件,对我来说是a.out. 如果我当时./a.out在命令行上键入,我会看到输出。

我认为从你的 Ruby/Python 背景来看,这里可能存在一个稍微大一点的概念问题。Ruby 和 Python(通常)是解释型语言,这意味着当您创建脚本文件时,您可以将其标记为可执行文件,并且通过某种魔法,操作系统将启动一个程序来读取文件并为您执行它们。但是,C 已编译。因此,当您运行 GCC 时,它会获取您的源文件并将其转换为具有默认名称或指定名称的可执行文件。此时,除非编译过程出现问题,否则不会期望看到任何输出。然后你可以运行./hello,这是一个可执行文件,并查看你的输出。

这也解释了为什么您不能标记hello.c为可执行文件并运行它。它需要先编译成可执行文件。看起来系统正在假装它是一个 shell 脚本,但实际上不是,并给你一个语法错误。

于 2012-06-12T15:49:28.220 回答
8

gcc hello.c将生成一个名为的文件a.out
gcc hello.c -o hello将生成一个名为的文件hello

这些是可执行文件,您需要执行/运行这些文件才能获得输出。

运行这些作为

./a.out或者./hello

于 2012-06-12T15:44:42.787 回答
7

gcc hello.c -o hello 指定您要创建一个名为 hello.exe 的可执行文件。

您必须编译所有 C 文件,然后运行可执行文件才能运行程序。您实际上无法运行 .c 文件。当您不指定 exe 时,它​​只会编译。您没有错误这一事实是一件好事,因为这意味着您的代码是正确的!:)

于 2012-06-12T15:44:51.820 回答
5

第一次,您的可执行文件被命名为“a.out”(或 Windows 上的“a.exe”),这是 gcc 赋予可执行文件的历史默认名称。

您应该花一些时间来弄清楚源代码和可执行文件之间以及打开和执行之间的区别......

于 2012-06-12T15:43:36.010 回答
3

欢迎编程和 Stack Overflow!

gcc hello.c

编译该文件并生成一个可执行文件“a.out”,但不执行它。这就是为什么在您的命令行上没有发生任何事情的原因。
要开始执行,您必须输入:

./a.out

如果我理解正确,就像你对“你好”所做的那样。
如果你想用 C 编程,你必须了解编译、链接和执行之间的区别,给自己找一本很好的初学者书籍或教程,这是值得的!
干杯!

于 2012-06-12T15:50:22.200 回答
0

你得到了

syntax error near unexpected token `('
`int main()'

对 hello.c 源文件设置保护并尝试运行它时出错。

使用 gcc 将您的 .c 源文件转换为您可以运行的二进制程序。

gcc -o hello hello.c

我使用的顺序并不重要。我只是习惯了这种编译方式。你这样编译

gcc hello.c -o hello

这很好。

成功的编译和链接创建了一个名为 hello 的输出文件,您将运行该文件

./hello
于 2012-06-12T16:01:24.763 回答
-1

您是否尝试过在显示终端窗口之前包含#include<conio.h>和包含。getch()return 0;

于 2014-02-09T17:19:00.670 回答