研究学习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;
}
答案 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 ... ... ...