【问题标题】:compiling with gcc with system()使用 gcc 编译 system()
【发布时间】:2015-06-12 16:16:26
【问题描述】:

我的代码在使用时编译不正确:

system("gcc -o filename temp.c");

我得到:

implicit declaration of function system

我不确定缺少什么,因为它只会在 gcc 调用时引发系统错误。

这是我的代码:

#include <stdio.h>

int main() {
        ...
        system("gcc -o filename temp.c");
        return 0;
}

【问题讨论】:

标签: c gcc compiler-errors


【解决方案1】:

main() 的顶部添加#include &lt;stdlib.h&gt;

提示:当您看到内置函数的隐式声明时,您必须搜索该函数(例如使用 google,现在您应该使用“system() C”进行搜索) ,以便找到相应的头文件,即函数声明的位置。那么其中一个结果应该是函数的引用。

在我们的例子中是this 链接。在那里你可以看到:

概要

#include <stdlib.h>
int system(const char *command);

它告诉您必须包含 stdlib 标头才能使用 system()

正如 Bright 先生所注意到的,如果您使用的是类似 inux 的操作系统,man 3 system 也应该可以解决问题。

例子:

samaras@samaras-A15:~$ man 3 system
SYSTEM(3)                  Linux Programmer's Manual                 SYSTEM(3)

NAME
       system - execute a shell command

SYNOPSIS
       #include <stdlib.h>  <-- this is what we are looking for!

       int system(const char *command);
...

【讨论】:

  • 如果您使用的是 unixy 操作系统,man 3 system 也应该可以解决问题。
  • 好的,所以如果有什么东西抛出了函数的隐式声明,是否意味着缺少头文件?
  • 是的@JoshBuchanan,虽然不是任何标题,但该特定功能当时需要包含的标题。现在system() 需要stdlib.h 被包括在内。不过,很好的问题,你得到了我的 +1。希望你保留我的提示,这将有助于我相信!
  • @G.Samaras 谢谢,我会记住这一点,这就像我的第三个 C 程序。仍在试图弄清楚该看什么以及何时看。
【解决方案2】:

由于您使用的是 Posix 系统,因此您应该了解 man 命令,该命令显示大多数库调用的文档。在我的系统上,当我输入时:

$ man system

我明白了:

SYSTEM(3)                  Linux Programmer's Manual                 

NAME
       system - execute a shell command

SYNOPSIS
       #include <stdlib.h>

       int system(const char *command);

请注意,在概要中它会告诉您需要使用的包含文件。手册页还包含许多其他文档,例如返回值。

【讨论】:

    【解决方案3】:

    您没有收到错误,也没有阻止代码的编译,只是警告您没有添加库系统功能,而是 gcc 自动添加。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多