[英]definition of function printf in C language
我已經讀過C語言不包含用於輸入和輸出的指令,並且printf,scanf,getchar和putchar實際上是函數。
那么,獲得功能printf的原始C語言指令是哪些? 謝謝。
如果要使用printf
,則必須#include <stdio.h>
。 該文件聲明了該功能。
如果您在考慮如何實現printf:printf可能會在內部調用任何其他函數,並且可能會進入putc
(也是C運行時的一部分)來逐個寫出字符。 最終,其中一個功能需要真正將字符寫入控制台。 如何完成此操作取決於操作系統。 例如,在Linux上, printf
可能會在內部調用Linux write
函數。 在Windows上, printf
可能在內部調用WriteConsole
。
函數printf
記錄在這里 ; 實際上,它不是C語言本身的一部分。 語言本身不提供輸入和輸出的手段。 函數printf
在庫中定義,可以使用編譯器指令#include <stdio.h>
進行訪問。
沒有一種編程語言為I / O提供真正的“基元”。 任何I / O“原語”都依賴於較低的抽象級別,無論是這種語言還是另一種語言。
最低級別的I / O需要訪問硬件。 您可能正在查看BIOS中斷,硬件I / O端口,內存映射的設備控制程序或其他所有內容,具體取決於程序所運行的實際硬件。
由於在編程語言的實現中滿足所有這些可能性將是一個真正的負擔,因此采用了硬件抽象層 。 各個I / O控制器由硬件驅動程序訪問,而硬件驅動程序又由操作系統控制,操作系統通過定義的抽象API向應用程序開發人員提供I / O服務。 這些可以直接訪問(例如,通過用戶空間組裝),也可以進一步包裝(例如,通過編程語言的解釋器或標准庫函數的實現)。
無論您正在查看的是“ bash” echo
或“ Python” print
類的“命令”,還是諸如(Java) System.out.println()
或(C) printf()
或(C ++) std::cout
類的庫函數,只是一個語法上的細節:任何I / O都要經歷幾層抽象,因為它更容易,並且因為它可以保護您免受各種錯誤或惡意程序行為的侵害。
這些是相應語言的“原始語”。 如果您要進一步研究,您將離開該語言的領域,並進入其實現的領域。
我曾經親自進行過C庫實現。 此后,該項目的所有權就已經轉移了 ,但是基本上它是這樣工作的:
printf()
是通過printf()
實現的vfprintf()
最終, *printf()
系列的每個函數也是如此)。 vfprintf()
使用了幾個內部助手來進行精美的格式化,並將其寫入緩沖區。 writef()
函數。 writef()
函數。 在POSIX上,它將調用write()
。 在Win32上,它將調用WriteFile()
。 等等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.