2013-11-27 25 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

一個這就是爲什麼它被稱爲標準庫。

相關問題