美文网首页
宏定义&宏函数(日志输出)define

宏定义&宏函数(日志输出)define

作者: 贝克街的猫大哥呀 | 来源:发表于2017-08-25 00:25 被阅读0次

最常见的就是

#indef __cplusplus

这表示支持C++语法

再如可以定义常量

#define MAX 100 

这跟JAVA全局变量有什么区别呢?

JAVA的变量是有类型的,这没有类型,这只是替换而以!

还有就是宏函数,就是就是当函数名太长时,可以简写而以!

void cat_read(){

   printf("%s\n","input something");

}

#define jni(NAME) cat_##NAME();

void main(){

   jni(read);

   system("pause");

}

上面就是将cat_read这个方法函数,变成了 jni(read)来调用!很简单哇-

举个日志输出的例子

#define LOG(FORMAT,...) printf(##FORMAT,__VA_ARGS__);

void main(){

   LOG("%s","123");

   system("pause");

}

定义了一个LOG函数,其实...表示不确定后面有几个参数,也许1个,也许多个,与后面的__VA_ARGS__对应,这表示可变参数,这是固定写法

第一个参数 FORMAT,并不是固定写法,可以替换成任意字符串,比如NAME

再比如,日志会有级别,比如I级,这里可以这样写

#define LOG_I(FORMAT,...) printf("INFO:");printf(##FORMAT,__VA_ARGS__);

void main(){

   LOG_I("%s", "123");

   system("pause");

}

最终就会输出:INFO:123

说穿了就是替换。在程序的预编译期完成替换工作。

再来个升级的LOG写法

#define LOG(LEVEL,FORMAT,...) printf(##LEVEL); printf(##FORMAT,__VA_ARGS__);

#define LOG_I(FORMAT,...) LOG("INFO:",##FORMAT,__VA_ARGS__);

void main(){

   LOG_I("%s", "123");

system("pause");

}

相当于第二个LOG_I的定义,又引用了第一个定义,相当于替换了两次

相关文章

  • 宏定义&宏函数(日志输出)define

    最常见的就是 #indef __cplusplus 这表示支持C++语法 再如可以定义常量 #define MAX...

  • 准备:回顾c

    宏定义 关键字 define 定义一个常量的方法(即宏定义) 带参数的宏定义 宏函数的定义 使用宏函数的好处是,不...

  • C语言 预处理指令

    一 .宏定义 #define 宏定义宏定义会在预处理的时候,用宏定义的值来替换宏的名称 定义格式 "#define...

  • ios宏的总结

    宏定义为对象宏和函数宏,对象宏通常是对一些简单的对象进行替换,如#define M_PI 3.1415,函数宏(在...

  • 宏和条件编译的结合使用

    宏 宏定义 有参数 无参数 1.无参数的宏 语法: #define 宏名 宏值 #define MM 10 //...

  • C 语言之宏定义与条件编译

    一. 宏定义 #define PI 3.141592653 //无参宏 #define SUM(a,b) a + ...

  • 内联函数与宏定义

    内联函数与宏定义 在C中,常用预处理语句#define来代替一个函数定义。例如:#define MAX(a,b) ...

  • [C++面试]宏相关问题

    1. 宏常量与宏函数 C++中用#define <宏名> <字符串>命令定义宏,在代码中将字符串替换宏名出现的位置...

  • C语言预处理指令

    预处理指令 宏定义 宏定义会在预处理的时候, 用宏定义的值来替换宏的名称 格式: #define 宏名称 宏值 应...

  • 2018-07-03学习知识点6

    关于#define 宏定义 之前的项目了使用的大量的宏定义,包含很多函数,各种常量等。没有做区分,反正就是把经常用...

网友评论

      本文标题:宏定义&宏函数(日志输出)define

      本文链接:https://www.haomeiwen.com/subject/eovrdxtx.html