C语言宏定义

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 姓名:吕彬 学号:1613014035 【嵌牛导读】#define 宏定义是个演技非常高超的替身演员,但也会经常耍...
    傻彬儿阅读 1,290评论 0 1
  • 最近在查找激光甲烷遥测仪有些主控板启动不了的原因时,顺便研究了TMS320VC5509A和STM32F407之间通...
    华杰研习社阅读 934评论 0 3
  • 宏定义指令 (# define)用来定义一个标识符和一个字符串,以这个标识符来代表这个字符串。 不带参数的宏定义:...
    大鱼鱼阅读 1,010评论 0 0
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,068评论 0 13
  • 相信大家在日常生活中都用过各种备忘录或者提醒工具吧,有时候是不是感觉用起来很繁琐,特别是需要很多条备忘的时候。所以...
    最美应用阅读 688评论 0 4