Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 声明和定义存储在哪里?_C_Function_Declaration - Fatal编程技术网

C 声明和定义存储在哪里?

C 声明和定义存储在哪里?,c,function,declaration,C,Function,Declaration,对于预定义函数,声明和定义存储在哪里? 声明是否存储在库中?如果是这样,那么为什么它被命名为库函数?头文件包含内置函数的声明,库包含函数的定义 之所以称为库,是因为在我看来,作为包含书籍的实际库,这些库包含类、函数、变量等。这是一个不精确的问题。我们能给出的最佳答案是: 标准库函数的声明最好被认为存储在它们的头文件中 根据您的想法,标准库文件的定义可以在您可能看不见的库的源文件、编译器供应商的商业秘密中,也可以在库文件本身的.a、.so、.lib或.dll中 如今,标准库函数的知识通常也内置于编

对于预定义函数,声明和定义存储在哪里?
声明是否存储在库中?如果是这样,那么为什么它被命名为库函数?

头文件包含内置函数的声明,库包含函数的定义


之所以称为库,是因为在我看来,作为包含书籍的实际库,这些库包含类、函数、变量等。

这是一个不精确的问题。我们能给出的最佳答案是:

标准库函数的声明最好被认为存储在它们的头文件中

根据您的想法,标准库文件的定义可以在您可能看不见的库的源文件、编译器供应商的商业秘密中,也可以在库文件本身的.a、.so、.lib或.dll中

如今,标准库函数的知识通常也内置于编译器中。例如,如果我编写旧的经典int main{printfHello,world!\n;},但没有任何include指令,我的编译器会说,警告:隐式声明库函数“printf”,并包含头


这个故事有两个方面:

调用库/外部函数的代码:编译器在编译的模块中生成一个引用,该引用对您希望在其他地方存在的函数原型进行编码。 必须链接代码的预编译库文件:库文件包含其函数的编码原型以及实际编译的二进制文件,即这些函数的定义/实现。 当您的代码使用外部函数时,编译器将生成对该函数的引用,并假定该引用将在稍后的链接阶段解析


在链接过程中,建立函数引用列表。链接器希望找到每个使用的引用的“定义”或实现。

通过预定义,您是指C标准API之一吗?还是你写的?答案大致相同,但您需要澄清您的混淆点,这里的样板是将声明保存在.h文件中,存储在库程序员机器上的源文件中的定义和链接库中的实现。@ShadowRanger我的意思是c标准函数,如printfThese days gcc对printf非常了解,因此在可能的情况下,它将printf替换为put,如您的示例中的callq 400420。