1. 程式人生 > >C語言編寫log檔案以及printf函式實現原理

C語言編寫log檔案以及printf函式實現原理

C語言編寫log檔案以及printf函式實現原理

        在系統除錯中通過在檔案系統裡寫log日誌是一個長期分析系統執行的好方法。做系統除錯應該養成這個習慣,可以方便的監控系統可能出現的各種異常。

        今天學習下log日誌的書寫方法。Log一般可以分為以下4種:

        ERROR(錯誤):此資訊輸出後,主體系統核心模組正常工作,需要修復才能正常工作。

        WARN(警告) :此資訊輸出後,系統一般模組存在問題,不影響系統執行。

        INFO(通知)  :此資訊輸出後,主要是記錄系統執行狀態等關聯資訊

        DEBUG(除錯):最細粒度的輸出,除卻上面各種情況後,你希望輸出的相關資訊,都可以在這裡輸出。

        在多執行緒的程式中,可以按照以下的方式書寫log

        這樣在分析執行狀況時就基本可以復現程式執行的流程了。        

        另外學習下printf函式實現的原理。C語言中printf函式的引數是可變的,是通過棧實現引數的傳遞。printf至少有一個引數,就是字串指標,如果還有其他引數,比如

printf("a=%d b=%d",i,j); 會從右往左依次把引數壓入棧內,先壓j然後壓i,然後壓這個串"a=%d b=%d"的首地址也壓入棧。在進行解析的時候是後入先出,按照%d去尋找後面的參

數。這樣其實printf並不知道一共有幾個引數,完全按照%d或者其他格式的型別去處理。這就有個問題就是要特別注意變數定義的型別一定要與格式控制符表示的格式一致

,不一致會

出現讀取錯誤.當然printf在轉換引數時,對棧只讀不寫,不會造成棧錯誤。

相關推薦

C語言編寫log檔案以及printf函式實現原理

C語言編寫log檔案以及printf函式實現原理        在系統除錯中通過在檔案系統裡寫log日誌是一個長期分析系統執行的好方法。做系統除錯應該養成這個習慣,可以方便的監控系統可能出現的各種異常。        今天學習下log日誌的書寫方法。Log一般可以分為以下4種

c語言標頭檔案以及make注意事項

c語言標頭檔案以及make注意事項 標頭檔案說明:自己定義的標頭檔案和專案檔案放在一起,注意使用""而不是使用<>,系統的標頭檔案才使用<> 當main函式要呼叫其他函式的時候在編譯的時候需要將其他的c檔案也一起編譯 gcc main.c test.c   make

c語言編寫500以內勾股函式

編寫程式求500 以內的勾股弦數,即滿足 c2=b2+a2的3個數,要求b>a。將所有符合要求的組合存入文字檔案中,每個組合佔一行。 #include<stdio.h> void gougu() { int a=1,b=1,c=1; int m=0

C語言讀取配置檔案以及128位元組對齊.bin配置檔案

配置檔案: #begin build properties factory=四川九州電子科技股份有限公司 oui=03 product_type=71 stbid=0371419916190000129 hw_version=00000473 sw_version=2016

c語言中關於變長引數函式原理

     printf函式是在串列埠資訊列印中和串列埠命令列介面功能實現中經常用的函式。呼叫方式一般是這樣子的printf("cmd =%s\r\rn", cmd_str),printf("vol=%dmV, current=%dmA.", vol,current)

c語言 利用指標變數,用函式實現將3個整數按從大到小的順序輸出

                利用指標變數,用函式實現將3個整數按從大到小的順序輸出。 解:程式: #include&l

C語言中利用封裝好的函式實現英文字母的大小寫轉換

在C語言中,利用tolower和toupper兩個函式實現英文字母的大小寫之間的轉換 範例1:將s字串內的小寫字母轉換成大寫字母 #include <ctype.h> int main(

C語言標頭檔案stdlib.h裡面有什麼函式

主要含有的內容方向: A.字串轉換 B. 隨機數 C.記憶體管理 D.與環境的介面 E.查詢與排序 F.整數運算 G.多位元組字元 … 友情連結: (1)關於 stdio.h 和 stdlib.h 包含的函式 https://blogG…csdn.net/weixin_42513339/

C語言 編寫函式: unsigned int reverse_bit(unsigned int value); 這個函式的返回 值value的二進位制位模式從左到右翻轉後的值。

#include<stdio.h> unsigned int reverse_bit(unsigned int value) { int ret = 0; int bit = 0; #include<stdio.h> unsigned int r

C語言編寫高併發Http檔案上傳下載伺服器

前言 前段時間學習tinyhttpd和libevent開源庫。 別人的程式碼寫的再好終究是別人的,自以為看懂了,等到自己真正寫的時候就會發現有各種問題。於是準備參考libevent裡面最最最基礎的功能(撿了芝麻丟了西瓜?),自己寫一個event,用於熟悉lib

C語言 編寫一個函式,它從一個字串中提取一個子字串

編寫一個函式,它從一個字串中提取一個子字串。函式原型如下: int substr(char dst[], char src[],intstart, int len) {} 目標:        從sr

c語言標頭檔案的作用以及寫法

標頭檔案幾個好處: 1,標頭檔案可以定義所用的函式列表,方便查閱你可以呼叫的函式; 2,標頭檔案可以定義很多巨集定義,就是一些全域性靜態變數的定義,在這樣的情況下,只要修改標頭檔案的內容,程式 就可以做相應的修改,不用親自跑到繁瑣的程式碼內去搜索。 3,標頭檔案只是

標準C語言中的檔案操作函式的記憶體版

1. 初衷 專案需要,itron作業系統中實裝freetype+harfbuzz的字型引擎,但itron系統中沒有支援檔案系統! 所以只能將依賴庫中的libdatrie和libthai中的檔案操作換成記憶體版。 2. 程式碼 廢話不說,直接上程式碼。 #include

c語言編寫求n的k次方函式,用迭代和遞迴兩種方法

在c語言中求n的k次方函式。雖然c語言中庫函式中已經存在,但是知道它的程式碼或者實現思想也是很必要的。那麼我們用兩種方式來實現:第一種:迭代法(效率在資料量比較大時要相比遞迴快一點)int power_ineration(int n,int k)//迭代 { int q =

C語言標頭檔案包含和編寫的幾個基本規則

總想著把所有的標頭檔案都塞到一個頭檔案裡邊,然後,所有.c檔案只包含這一個混雜的標頭檔案就行了,也不用注意太多,, 但是這樣好像不行,摘抄一篇文章備份一下,覺得寫的不錯, 尊重原創,原文連結:http://blog.csdn.net/ison81/article/det

linux環境下c++的編寫、除錯以及makefile多檔案連編需要注意的問題

最近剛開始接觸Linux C++,發現其與windows C++有太大的差別。這裡是自己的一些總結,如果有新人看到,希望能夠幫到您。 1、gcc編譯器簡介 生成一個.out需要將原始檔依次進行預處理、

C#語言編寫代碼時常用的三大循環

包括 表達式 分析 大循環 進行 隨筆 循環 重新 一半 在我們編寫C#語言的過程中,經常會遇到各種需要用循環的時候,但是c#語言中三種常用的循環體(while循環, do while循環,for循環)我們該怎麽選擇呢? 首先while循環,wh

如何用c語言編寫出一個對文件夾加密的程序

加密 文件夾加密 編寫 quest http html 文件 .com 程序 http://baobao.baidu.com/question/1be9811f542d58b862736798f5dd6f57.html?5N2g=2017/12/04 http://baob

c語言編寫經驗逐步積累4

自己的 替換 移位 棧幀 編譯器 none 個數 -i data 寥寥數筆,記錄我的C語言盲點筆記,僅僅為以前經歷過。亦有誤。可交流。?1.邏輯表達式的使用取值 = 表達式 ? 表達式1:表達式2。比方x = y >

C#語言編寫:數組分析器

find 操作 fin numbers 排序 ole class 數字 輸入 static void Main(string[] args) { #region 創建數組 Console.Write("請輸入數組的