宏定义是什么?为什么要进行宏定义?宏定义的格式 |
您所在的位置:网站首页 › 创业的概念定义是什么意思 › 宏定义是什么?为什么要进行宏定义?宏定义的格式 |
宏定义是C语言提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。 宏定义和操作符的区别:宏定义是替换,不做计算,也不做表达式求解。宏定义又称为宏代换、宏替换,简称“宏”。在 C 语言中,宏是产生内嵌代码的唯一方法。对于嵌入式系统而言,为了能达到性能要求,宏是一种很好的代替函数的方法。 宏定义的格式:#DEFINE 标识符 字符串 掌握"宏"概念的关键是“换”,一切以换为前提、做任何事情之前先要换,准确理解之前就要“换”,即在对相关命令或语句的含义和功能作具体分析之前就要换。 定义宏需要注意以下几点: (1)宏名一般用大写; (2)使用宏可提高程序的通用性和易读性,减少不一致性,减少输入错误和便于修改。例如:数组大小常用宏定义; (3)预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查; (4)宏定义末尾不加分号; (5)宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头; (6)可以用#undef命令终止宏定义的作用域; (7)宏定义允许嵌套; (8)字符串( " " )中永远不包含宏; (9)宏定义不分配内存,变量定义分配内存; (10)宏定义不存在类型问题,它的参数也是无类型的。 在C语言/类C语言环境中,宏的作用有如下几种: 1.取代Magic Number 这个作用在嵌入式开发时太重要了。一个SoC 50多页的datasheet,上百个寄存器的位操作,如果没有很好的语义宏定义,调程序查手册绝对是崩溃的节奏! 2.防止重复定义 #ifndef XXXX #define XXXX #endif 3.快速控制代码编译 #define SIMULATION_DEBUG 1 #if SIMULATION_DEBUG use simulated data #else real data #endif 4.编译系统控制链 在某些系统下,可以把宏定义传递给编译器,从而通过编译脚本(makefile)来控制编译选项,例如,配合上面代码,就可以在Makefile里定义: CDEFINES=$(CDEFINES) /SIMULATION_DEBUG 说到编译,自然还要提一下 ANSI C中预定义的几个非常有用的编译宏: • _ L I N E _ • _ F I L E _ • _ D A T E _ • _ T I M E _ • _ S T D C _ 例如 #define DEBUGMSG(msg,date) printf(msg); printf(“%d%d%d”,date,_LINE_,_FILE_) 5.使用typedef C语言下typedef也是属于宏定义,我会告诉你C语言下struct+typedef+函数指针可以做到面向对象的继承,重载和多态吗?(有兴趣可以看一下MFC的源码实现,把传统的C风格的Windows API各种包装修饰和装逼。) typedef int (*PFFunc1)(int); 6.简化操作 得到一个字的高位和低位字节 #define WORD_LO(xxx) ((byte) ((word)(xxx) & 255)) #define WORD_HI(xxx) ((byte) ((word)(xxx) >> 8)) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |