无法在头文件中定义stdio函数和变量,而不必使用.c文件。
如果没有,.c文件用于什么?
发布于 2019-08-07 23:41:38
必须实现头文件中定义的函数。.c文件包含实现,尽管这些实现已经编译到编译器可以使用的静态或共享库中。
头文件应包含函数的最小描述,以节省编译时的时间。如果它包含整个源代码,它将迫使编译器每次编译时都重新构建它,这是非常浪费的,因为该源代码永远不会更改。
实际上,头文件充当关于如何与已经编译的库交互的备忘单。
提供.c文件的原因主要是为了调试,因此调试器可以在调试构建中逐步完成,并向您展示源代码,而不是原始机器代码。在罕见的情况下,您可能希望查看特定函数的实现,以便更好地理解它,或者在更罕见的情况下,识别bug。它们实际上不是用来编译你的程序的。
在您的代码中,您只应该通过一个.h指令引用头文件版本,即#include。
发布于 2019-08-08 00:10:44
stdio.h是一个标准的报头,每个符合规范的C实现都需要提供它。它声明但没有定义许多实体,大部分是像putchar和scanf这样的库函数。
如果存在stdio.c,则很可能是定义在stdio.h中声明的函数的C源文件。不要求实现必须使其可用。它甚至可能不存在;例如,在stdio.h中声明的函数的实现可能出现在多个*.c文件中。
putchar的声明是:
int putchar(int c);这就是编译器在程序中看到对putchar的调用时需要知道的所有信息。实现putchar的代码通常作为机器代码提供,链接器的工作是解析您的putchar()调用,从而最终调用该代码。putchar()甚至可能不是用C编写的(尽管它可能是用C编写的)。
可以从多个*.c源文件构建可执行程序。整个程序需要实现putchar的代码的一个副本,也是唯一一个副本。如果putchar的实现在头文件中,那么它将包含在每个单独编译的源文件中,从而产生冲突,充其量也是浪费空间。实现putchar()的代码(以及库中的所有其他函数)只需要编译一次。
发布于 2019-08-08 04:45:14
.c文件对任何目标都具有特定的功能。例如,stdio.c文件在C程序中具有要使用的standart输入输出函数。在stdio.h头文件中,所有stdio.c函数、所有定义、所有宏等都有函数原型。当#include <stdio.h>在主code.c文件中时,主代码假定存在“int printf(const char *format, ...)”函数。返回int值,您可以传递参数……等等,当您调用printf()函数时,实际上使用的是stdio.c文件。
https://stackoverflow.com/questions/57403453
复制相似问题