外部:找不到命令

extern: command not found

我正在关注 this lab Udemy 计算机安全课程,该课程主要使用 C(我认为)脚本进行演示。在我自己的计算机上(在 Ubuntu 和 MacOS 环境中)尝试 运行 以下程序后,我得到了很多错误,似乎编译器甚至不知道它正在读取什么语言.

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

extern char **environ;

void printenv()
{
  int i = 0;
  while (environ[i] != NULL) {
    printf("%s\n", environ[i]);
    i++;
  }
}

void main()
{
  pid_t childPid;
  switch(childPid = fork()) {
    case 0: /* child process */
      printenv();
      exit(0);
    default: /* parent process */
      //printenv();
      exit(0);
  }
}

错误:

line 4: extern: command not found
line 5: syntax error near unexpected token '('
line 5: 'void printenv()'

有人知道这是怎么回事吗?我不熟悉 C(主要在 Javascript 和 Python 中工作),但似乎一切都是非常标准的语法,不应该出错。

以下建议代码:

  1. 干净地编译
  2. 执行所需的功能
  3. 不尝试制造僵尸

注意:我在 linux 上编译了这个:

gcc   -O1  -ggdb -Wall -Wextra -Wconversion -pedantic   -c "untitled2.c"  -I. 

注意:我将它链接到:

gcc   -ggdb -Wall -o "untitled2" "untitled2.o"

然而,fork() 可能会失败,在这种情况下它 returns -1,所以代码应该有一个

case -1:
    perror( "fork failed" );
    break;

现在,建议的代码:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>

extern char **environ;

void printenv()
{
  int i = 0;
  while (environ[i] != NULL) {
    printf("%s\n", environ[i]);
    i++;
  }
}

int main( void )
{
  pid_t childPid;

  switch(childPid = fork()) 
  {
    case 0: /* child process */
      printenv();
      exit(0);

    default: /* parent process */
      //printenv();
      waitpid( childPid, NULL, 0);
      exit(0);
  }
}