c - 为什么非常简单的 Hello World 程序没有输出?

标签 c

我想知道为什么我的 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()'

最佳答案

当你输入时

gcc hello.c

没有任何反应,这是可以预料的。或者更准确地说,GCC 将使用默认名称编译可执行文件,对我来说是 a.out。如果我当时在命令行上输入 ./a.out,我会看到输出。

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

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

关于c - 为什么非常简单的 Hello World 程序没有输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11000065/

相关文章:

python - 如何在没有网络的情况下通过 wifi 发送原始数据包?

c - 弹性给予 "fatal scanner internal error--end of buffer missed"

编译错误 : conflicting types for 'modify' - why?

c - 我如何限制宏对我的函数的使用,就像 C++ 中的 private 一样?

c - 未标记结构的重新声明是兼容类型吗?

c - 使用 minifilter 驱动程序的 USB 阻塞(passThrough)

c - 从左到右、从上到下翻转图像

c - 此 C 代码如何转换为 MIPS 指令?

c - STDOUT 缓冲区在哪里?

c - 用C中的矩阵绘制实心圆