运行c程序 - stdio.h我从哪里得到它?

时间:2012-03-10 14:07:57

标签: c unix makefile

研究学习C.据我所知,当我说#include <stdio.h>时,它从默认位置抓取stdio.h ...通常是工作目录中名为include的目录。我如何实际获取文件stdio.h?我是否需要下载一堆.h文件并将它们从项目移动到include目录中的项目?我在test.c文件中执行了以下操作。然后我运行make test并输出二进制文件。当我跑./test时,我没有在屏幕上看到你好的打印。我以为我没有看到输出可能是因为它找不到stdio.h库。但是,如果我删除stdio中的大于或小于符号,编译器会给我一个错误。有什么想法吗?

我在Mac上从命令行运行它。我正在使用:GNU Make 3.81。这个程序是为i386-apple-darwin10.0构建的。

#include <stdio.h>

main()
{
  printf("hello");
}

编辑:我已更新我的代码以包含主函数的数据类型并返回0.我仍然得到相同的结果...编译没有错误,当我运行文件./test它不打印任何东西在屏幕上。

#include <stdio.h>

int main()
{
  printf("hello");
  return 0;
}

更新: 如果我在printf中添加\ n,它可以正常工作!所以这会奏效:

#include <stdio.h>

    int main()
    {
      printf("hello\n");
      return 0;
    }

4 个答案:

答案 0 :(得分:1)

如果您没有该文件,则会出现编译错误。

我的猜测是文字被打印出来了,但是在你有机会看到之前控制台已经关闭了。

此外,main会返回int,您应该return 0;表示成功完成。

答案 1 :(得分:1)

您的代码最好

 printf("hello\n");

 puts("hello");

如果您想知道标准头文件<stdio.h>的来源,可以使用适当的标志运行编译器。如果是gcc,请尝试使用

进行编译
gcc -H -v -Wall hello.c -o hello

迂腐地,标准头文件甚至不需要作为文件存在;该标准允许在不访问文件系统的情况下处理#include <stdio.h>的实现(例如,通过检索编译器内部或数据库中的内部资源......)。很少有编译器采用这种方式,大多数编译器都会访问文件系统中的内容。

答案 2 :(得分:0)

带尖括号的

#include <header.h>在标准系统位置搜索,编译器已知 - 而不是在项目的子目录中。在Unix系统(包括你的Mac,我相信)中,stdio.h通常位于/ usr / include中。如果您使用#include "header.h",则首先搜索子目录,然后搜索与<header.h>相同的位置。

但是您不需要查找或复制标题来运行您的程序。它是在编译时读取的,所以你的./test根本不需要它。你的程序看起来应该有用。您是否可能只键入“test”而不是“./test”,并获得系统命令“test”? (建议:不要将程序命名为“test”。)

答案 3 :(得分:0)

只需将其留在这里:仍然!在2018年12月... Linux Mint 18.3 不支持C开发。

无辜/#cc ThatSorts.c

ThoseSorts.c:1:19:致命错误:stdio.h:没有此类文件或目录 编译终止。

无辜/#gccThatSorts.c

ThoseSorts.c:1:19:致命错误:stdio.h:没有此类文件或目录 编译终止。

无辜/#apt show libc6

(缩写)::
封装:libc6
版本:2.23-0ubuntu10
优先级:必填
节:libs
资料来源:glibc
来源:Ubuntu
已安装大小:11.2 MB
取决于:libgcc1
主页:http://www.gnu.org/software/libc/libc.html
说明:GNU C库:共享库
包含几乎所有程序上使用的标准库
系统。该软件包包括标准C库的共享版本
以及标准数学库以及其他许多数学库。

无辜/#apt-get install libc6-dev libc-dev
所以,魔术……一分钟后,它们都安装在了 计算机,然后一切正常运行。

并非所有发行版都捆绑了每个ISO中的所有C支持库。 嗯。

hardlyinnocent /#gccThatSorts.c

几乎没有恶意/#./a.out

20 18岁 17 16 ... ... ...