c語言里用宏定義打印log的技巧整理


1.

#define Conn(x,y) x##y
#define ToChar(x) #@x
#define ToString(x) #x

x##y表示什么?表示x連接y,舉例說:
int n = Conn(123,456);   結果就是n=123456;
char* str = Conn("asdf", "adf")結果就是 str = "asdfadf";

再來看#@x,其實就是給x加上單引號,結果返回是一個const char。舉例說:
char a = ToChar(1);結果就是a='1';
做個越界試驗char a = ToChar(123);結果是a='3';
但是如果你的參數超過四個字符,編譯器就給給你報錯了!error C2015: too many characters in constant   :P

最后看看#x,估計你也明白了,他是給x加雙引號
char* str = ToString(123132);就成了str="123132";

最后留幾個小試驗給大家去測測:
#define Dec(x,y) (x-y)
int n = Dec( A(123,1), 1230);
n = Conn(123, Conn(123,332) );
char* str = A("12", ToString( Dec(3,1));

 

2.

#define log(...) printf(__VA_ARGS__)  

 

http://blog.csdn.net/zanget/article/details/4556447

 

void uart_printf(const char *fmt, ...);

#define MAX_MY_SPRINTF 500
char my_sprintf_buf[MAX_MY_SPRINTF];

#define PRINT(...) uart_printf(__VA_ARGS__)
#define FL_PRINT(...) uart_printf(__VA_ARGS__),uart_printf(",%s %d %s",__FILE__,__LINE__,__func__)
#define SPRINTF(buf,...) sprintf(buf+strlen(buf),__VA_ARGS__),\
sprintf(buf+strlen(buf),",%s %d %s",__FILE__,__LINE__,__func__),buf[MAX_MY_SPRINTF - 1]=0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM