日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言自定义打印宏函数

發布時間:2023/12/31 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言自定义打印宏函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在調試大型項目中,打印信息分級和指出打印所在處,更方便于解決問題。查閱網上的文章并加上自己的修改,實現了個簡單的宏打印函數來達到目的。宏函數實現在頭文件中,加上了打印級別來控制打印是否輸出,打印級別的設定需在調用的.c文件中自定義(這樣做是為了能實現不同文件的打印級別能不一樣,在調試指定文件或模塊的問題是,能起到屏蔽其他無關代碼打印的作用)。

typedef.h源碼:?

#ifndef _TYPEDEF_H_ #define _TYPEDEF_H_ #include < stdarg.h>#define INFO_OUTPUT ? ? ?3 #define WARNING_OUTPUT ? 2 #define DEBUG_OUTPUT ? ? 1 #define ERROR_OUTPUT ? ? 0//#define DEBUG_LEVEL ? ? ?DEBUG_OUTPUT //需在使用以下打印宏的.c文件中定義“DEBUG_LEVEL”變量 #define INFO_PRINT(info,...) ?\ do{ \if(DEBUG_LEVEL>=INFO_OUTPUT){\printf("Info %s,%s,%d:"info"",__FILE__,__FUNCTION__,__LINE__,##__VA_ARGS__);}\ }while(0)#define WARNING_PRINT(info,...) ?\ do{ \if(DEBUG_LEVEL>=WARNING_OUTPUT){\printf("Warning %s,%s,%d:"info"",__FILE__,__FUNCTION__,__LINE__,##__VA_ARGS__);}\ }while(0)#define DEBUG_PRINT(info,...) ?\ do{ \if(DEBUG_LEVEL>=DEBUG_OUTPUT){\printf("Debug %s,%s,%d:"info"",__FILE__,__FUNCTION__,__LINE__,##__VA_ARGS__);}\ }while(0)#define ERROR_PRINT(info,...) ?\ do{ \if(DEBUG_LEVEL>=ERROR_OUTPUT){\printf("Error %s,%s,%d:"info"",__FILE__,__FUNCTION__,__LINE__,##__VA_ARGS__);}\ }while(0)#endif

?

測試代碼main.c:

#include<stdio.h> #include<Windows.h> #include "typedef.h"static int DEBUG_LEVEL = DEBUG_OUTPUT;void main(int argc,char **argv) {INFO_PRINT("hello %s\n", "world!");WARNING_PRINT("hello %s\n", "world!");DEBUG_PRINT("hello %s\n","world!");ERROR_PRINT("hello %s\n", "world!");while (1){Sleep(1000);} }

打印結果:

?

注:在宏定義函數printf中info用雙引號括起來,是因為由于按照使用printf函數的習慣,在使用的時候的,info傳入是帶雙引號括起來的格式化字符串,如:DEBUG_PRINTT("input %d,%s\n",123,"abd");替換到宏里面的printf則為printf("Debug %s,%s,%d:""input %d,%s\n""",__FILE__,__FUNCTION__,__LINE__,123,"abd");這里利用了printf(“number1 ”? "number2 "? ?"number3"); 等價于printf("number1 number2 number3");的原理(如下圖)保證打印輸出達到想要的效果。按照這個原理可把DEBUG_PRINTT("input %d,%s\n",123,"abd");替換到宏里面并拆解成以下語句便能理解:printf("Debug %s,%s,%d:"? ?"input %d,%s\n"? ? "",__FILE__,__FUNCTION__,__LINE__,123,"abd");

生活不易,如果你覺得該文章對你有幫助,請幫忙點個贊👍,如有指教和討論,請在評論區留言一起探討。感謝觀看!

總結

以上是生活随笔為你收集整理的C语言自定义打印宏函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。