我正在開發玩具編程語言。我使用LLVM生成機器碼。現在我的問題是:如何從頭開始實現printf()函數?。在C程序中你可以調用libc
就是這樣。但是printf()的東西在內部是如何工作的呢?執行printf()函數
乾杯
我正在開發玩具編程語言。我使用LLVM生成機器碼。現在我的問題是:如何從頭開始實現printf()函數?。在C程序中你可以調用libc
就是這樣。但是printf()的東西在內部是如何工作的呢?執行printf()函數
乾杯
有兩個部分的printf()
實現。
首先,你有一些特定的調用約定的機制,使可變參數成爲可能。
其次,雖然你寫了一個循環,通過給函數的格式說明符來查看。簡單地說,它採用兩種操作之一,要麼將字符串複製到標準輸出(通過適用於您的平臺的系統調用),要麼將傳遞給該函數的可變參數之一顯示出來(並再次使用系統調用輸出)爲指定的格式。
例如,如果你看到一個%s
那麼你需要檢索下一個未消費的說法,其解釋爲char *
指針,然後確保內存它指向被複制到標準輸出,直到你擊中'\0'
。
http://www.opensource.apple.com/source/Libc/Libc-186/stdio.subproj/vfprintf.c –
或者這個:http://www.ijs.si/software/snprintf/ – Flexo
可能的[C代碼爲printf函數](http://stackoverflow.com/questions/4867229/code-for-printf-function-in-c) – roottraveller