2013-11-27 24 views
1

我有一个简单的程序,C程序如何获取库函数的定义,如printf

#include<stdio.h> 
void main() 
{ 
    printf(" Hello all \n"); 
} 
    在上述程序
  1. ,它是如何获得的库函数printf的定义。
  2. as printf是一个库函数,所以在我们的程序中它是如何链接和链接的,以及编译器如何知道链接哪个库。
  3. 上述程序中的哪一行指示编译器链接与printf相关的库。

回答

3
  1. 的声明是在stdio.h(只是进行类型检查)。该定义本身位于C标准库(UNIX上的libc.so)中。
  2. 链接器不会自动知道库。但是,它总是默认链接到libc.so,所以它总是找到这个定义。借助其他图书馆的其他功能,您必须自己找出并提供图书馆。
  3. 无(见上文)。
3

在上面的程序中,它是如何得到库函数printf的定义的。

编译器可以以任何方式使其工作。最常见的方法是实际上有一个名为stdio.h的文件,该文件具有该定义。

as printf是一个库函数,所以在我们的程序中它是如何链接的,它何时被链接,,,以及编译器如何知道链接哪个库。

编译器要么硬编码,要知道要链接到哪个库或者你必须告诉它。

上述程序中的哪一行向编译器指示链接与printf相关的库。

这取决于编译器。它可以检测到#include <stdio.h>并链接库。它可以随时链接图书馆。如果你明确地问它,它只能链接图书馆。检查你的编译器的文档或询问一个特定的编译器。

1
  1. “#include <stdio.h>” - 包含方法签名。
  2. 它没有。链接器会这样做。 printf在Standard Library
  3. 什么都没有。链接器链接。编译器编译。默认情况下,您的链接器几乎可以肯定包含标准库a

一个这就是为什么它被称为标准库。

相关问题