美文网首页C
C语言宏定义

C语言宏定义

作者: taobao | 来源:发表于2019-10-17 09:55 被阅读0次

1、一般定义

//定义常量
#define pi 3.1415926  

//定义表达式
#define add(a, b) a+b    
#define max(a, b) (a>b)?a:b

//复杂表达式最好用括号括起来, 防止出错
#define mul(a, b) (a)*(b)
mul(1+a, 2+b)  //会解析成:(1+a)*(2+b)

#define mul(a, b) a*b
mul(1+a, 2+b)  //会解析成:1+a*2+b

2、条件判断

#if defined true           //判断是否定义
#undef true                 //如果定义了取消定义
#define true 1             //重新定义
#endif                         //if结束

#ifdef true      //#ifdef是#if defined的简写
#endif

#if !defined true         //如果未定义
#define true 1
#endif

#ifndef true          //如果未定义  #ifndef是if !defined的缩写
#define true 1
#endif

3、编译时错误信息

#ifndef true
#error undefined true    //定义的错误信息不需要引号
#endif

4、系统常见自定义宏

__FILE__                    当前编辑的文件
__FUNCTION__          点前的函数名
__LINE__                    行号
__DATE__                    日期
__TIME__                      时间

5、宏参数的字符串化和宏参数的连接

字符串化:
#define STR(s) #s
printf("%s %s %s\n", STR(abc), STR('abc'), STR("abc"));
如果:
#define STR1(s) s
printf("%s\n", STR1("abc"));  //正确
printf("%s\n", STR1(abc));   //需要提前定义abc
printf("%s\n", STR1("abc"));   //需要提前定义'abc'

参数连接:
#define CON(a, b) a##b
printf("%d\n", CON(12, 34));    //输出1234
char *abcd = "test123";
printf("%s\n", CON(ab, cd));    //输出test123

相关文章

  • 精解C语言预处理命令(三)之“宏”的用法二

    关于C语言带参数的宏定义中的参数 C语言允许宏带有参数。在宏定义中的参数称为“形式参数”,在宏调用中的参数称为“实...

  • C语言宏定义

    1、一般定义 2、条件判断 3、编译时错误信息 4、系统常见自定义宏 5、宏参数的字符串化和宏参数的连接

  • C语言学习:C语言宏定义

    学C语言很久了,但还是不敢用宏定义,大神喜欢用宏定义。关于宏定义你又了解多少了,下面我们说一下宏定义。 宏定义的概...

  • C语言自定义布尔bool类型

    C语言没有布尔类型,可以采用宏定义创建该类型

  • 编程基础

    C语言 #define定义的宏和const定义的常量有什么区别? defined定义宏的指令,程序在预处理阶段将用...

  • C语言 宏定义 swap

    方法1: 方法2: 说明: a^=b;:把a^b结果赋值给a b^=a;:相当于b=b^(a^b)。而b^(a^b...

  • C语言宏定义#define

    姓名:吕彬 学号:1613014035 【嵌牛导读】#define 宏定义是个演技非常高超的替身演员,但也会经常耍...

  • SDWebImage源码解读

    整体架构 按照分组方式,可以分为几组 定义通用宏和方法 SDWebImageCompat: 宏定义和C语言的一些工...

  • C语言-宏定义-带参宏

    宏定义指令 (# define)用来定义一个标识符和一个字符串,以这个标识符来代表这个字符串。 不带参数的宏定义:...

  • 3、Swift-“宏定义”的实现

    OC中的宏定义 C语言的宏定义, 并不是很严谨, 任何代码段都可以进行宏定义, 甚至是无效的无序的乱码也可以. 因...

网友评论

    本文标题:C语言宏定义

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