为什么我不能运行这个 C 程序?

Eng*_*ine 12 c compiler

我正在尝试运行我的第一个“进程”程序,但出现以下错误:

./fork.c: line 4: syntax error near unexpected token `('
./fork.c: line 4: `int main()'
Run Code Online (Sandbox Code Playgroud)

我很确定代码是正确的:

 #include <sys/types.h>
 #include <stdio.h>
 int main() {
     pid_t pid;
     printf("Hello fork()\n");
     switch(pid=fork())  {
         case -1: printf("Error by fork().....\n"); exit(0);
         case 0: printf("I'm the child process \n"); break;
         default: printf("I'm the dad \n"); break;
     }
  exit(0);
}
Run Code Online (Sandbox Code Playgroud)

怎么了?

Ren*_*nan 68

你不能只是跑./fork.c。这不是一个程序;它是程序的来源。Using./假定文件是一个脚本(它不是)并相应地处理它。

但是,如另一个答案中所述,有些编译器(如Tiny C Compiler)可以在不显式编译的情况下执行 C 代码。

由于它是一个 C 程序,因此您必须编译该程序。cc -o fork fork.c那就试试吧./fork;它在这里工作。

  • @Linuxios 在大多数 Linux 系统中,`cc` 是到 `gcc` 的符号链接。 (6认同)
  • 刚刚检查了几个 Solaris 框,并且`/usr/bin/cc` 链接到一个上的`/opt/SUNWspro/bin/cc` 和另一个上的`/opt/sunstudio12.1/bin/cc`。无论如何,它仍然是一个 C 编译器。 (2认同)

Ora*_*Dog 23

那不是程序,而是程序的源代码。

C 是一种编译语言,这意味着它必须先被“编译”成机器可读的指令,然后才能运行它。当您使用 C 时,“C 编译器”( cc) 可以做到这一点。

cc -o fork for.c   # compile the code
chmod +x fork      # ensure it it executable
./fork             # run the compiled program
Run Code Online (Sandbox Code Playgroud)

当您使用多个源文件和外部库处理更复杂的程序时,您可能会继续使用“GNU 编译器集合”( gcc) 并make描述如何将源代码转换为可运行的可执行文件。

这个问题有关于脚本(当你试图处理你的源代码)和编译程序之间区别的各种信息。

  • 关于“必须”这个词,`tcc` ([Tiny C Compiler](http://bellard.org/tcc/)) 可以在不显式编译的情况下执行 C 代码。http://pastebin.com/5FZiMpEn(通过重新添加编辑评论。抱歉弄乱了订单。) (4认同)