我想知道为什么我的C程序不打印任何信息.我是100%的编程新手,过去几周我已经能够在Ruby和Python中学到一些东西,但是我对C的东西无处可去.这是每个人首先学习的总基线,简单程序:
#include <stdio.h>
int main()
{
printf("Hello World\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
所以我已经写了,我保存为hello.c.现在我cd到它所在的目录,然后我尝试
gcc hello.c
Run Code Online (Sandbox Code Playgroud)
没有任何反应 - 没有错误,没有任何错误.如果我写的话
gcc hello.c -o hello
Run Code Online (Sandbox Code Playgroud)
一个新的可执行文件被写入我的目录,当我打开它时,它看起来像普通的命令行,并在那里写了"Hello World",正如我第一次在终端中所期望的那样.
我也试过让hello.c成为一个可执行文件,但是当我这样做时,我得到了
syntax error near unexpected token `('
`int main()'
Run Code Online (Sandbox Code Playgroud)
dso*_*ano 14
当你输入
gcc hello.c
Run Code Online (Sandbox Code Playgroud)
没有任何反应,这是可以预期的.或者更准确地说,GCC将编译一个具有默认名称的可执行文件,对我而言a.out.如果我./a.out在命令行输入,我会看到输出.
我认为从你的Ruby/Python背景中可能会有一个稍大的概念问题.Ruby和Python是(通常)解释语言,这意味着当您创建脚本文件时,您可以将其标记为可执行文件,并且通过一些魔术操作系统将启动一个程序来读取文件并为您执行它们.但是,C是编译的.因此,当您运行GCC时,它将获取源文件并将其转换为可执行文件,具有默认名称或指定名称.此时,除非编译过程出现问题,否则不会期望看到任何输出.然后你可以运行./hello,这是一个可执行文件,并看到你的输出.
这也解释了为什么你不能标记hello.c为可执行文件并运行它.它需要首先编译成可执行文件.看起来系统假装它是一个shell脚本,它不是,并且给你一个语法错误.
gcc hello.c将生成一个名为的文件a.out
gcc hello.c -o hello将生成一个名为的文件hello
这些是可执行文件,您需要执行/运行这些文件才能获得输出.
运行这些
./a.out 要么 ./hello
gcc hello.c -o hello指定要创建名为hello.exe的可执行文件.
您必须编译所有C文件,然后运行可执行文件以运行该程序.您实际上无法运行.c文件.如果不指定exe,则只编译.你没有错误的事实是一件好事,因为这意味着你的代码是正确的!:)
第一次,您的可执行文件被命名为"a.out"(或Windows上的"a.exe"),这是gcc为可执行文件指定的历史默认名称.
你应该花点时间搞清楚源和可执行文件之间的区别,以及开放和执行之间的区别......