宏的定义及用途,为什么要用宏定义( 二 )


对宏定义不正确的描述7宏在C语言的编程中里主要有四大用途:定义函数、代码生成、内联代码和对编译流程做出选择 。代码生成什么情况下需要呢?例如在游戏开发过程中编辑UI界面需要动态生成在UI上做的设置,例如大小,缩放等等 。使用宏定义自动生成代码就不用再每个类上编写缩放的代码函数了 。
宏定义的缺点8结构体的定义
结构体的一般表现形势为
struct 结构体名{
成员列表
};
在成员列表中可以是几种基本数据类型如char,int等,也可以是结构体类型(可以是这个结构体本身,或者是其他结构体类型)
定义一:
定义结构体类型,不定义变量,比如一个人,有性别,有年龄,有名字 。
struct Person{
char sex;
float years;
char *name;
};
然后再定义变量
struct Person ReCarChoi;
我们就定义了ReCarChoi这个人,它是Person这个结构体的一个变量,拥有里面的三个属性
(注意:这种定义方式struct关键字不能省略) 。
定义二:
定义结构体类型,同时定义变量 。比如
struct Person{
char sex;
float years;
char *name;
}ReCarChoi;
当你需要的结构体变量不多的时候,也可以直接省略结构体名字:
struct{
char sex;
float years;
char *name;
}ReCarChoi;
这样做书写简单,但是缺点就是后面无法利用该结构体定义新的变量;
定义三:使用宏定义
#define PER struct Person
PER{
char sex;
float years;
char *name;
【宏的定义及用途,为什么要用宏定义】};
PER ReCarChoi;
实际就是把struct Person替换成了PER,并无太多看点,只是写法方便了 。
宏程序的优缺点9看你是做什么类型的加工的
UG编程适合模具 单件的普通机加工这个软件也不是最适合的
宏程序适合大批量的产品机加工 用参数化编程来缩短编程时间 减少空刀 以使效率最大化 或者为机床增加个自动化的功能
如果你向模具方向发展 还是学UG吧 电脑编程其实比手工编程简单多了
宏定义和宏调用的区别10inline函数是C++引入的机制,目的是解决使用宏定义的一些缺点 。
1.为什么要引入内联函数(内联函数的作用)
用它替代宏定义,消除宏定义的缺点 。宏定义使用预处理器实现,做一些简单的字符替换因此不能进行参数有效性的检测 。另外它的返回值不能被强制转换为可转换的合适类型,且C++中引入了类及类的访问控制,在涉及到类的保护成员和私有成员就不能用宏定义来操作 。
2.inline相比宏定义有哪些优越处
(1)inline函数代码是被放到符号表中,使用时像宏一样展开,没有调用的开销效率很高;
(2)inline函数是真正的函数,所以要进行一系列的数据类型检查;
(3)inline函数作为类的成员函数,可以使用类的保护成员及私有成员;
3.inline函数使用的场合
(1)使用宏定义的地方都可以使用inline函数;
(2)作为类成员接口函数来读写类的私有成员或者保护成员;
4.为什么不能把所有的函数写成inline函数
内联函数以代码复杂为代价,它以省去函数调用的开销来提高执行效率 。所以一方面如果内联函数体内代码执行时间相比函数调用开销较大没有太大的意义;另一方面每一处内联函数的调用都要复制代码,消耗更多的内存空间,因此以下情况不宜使用内联函数 。
(1)函数体内的代码比较长,将导致内存消耗代价;
(2)函数体内有循环,函数执行时间要比函数调用开销大;
另外类的构造与析构函数不要写成内联函数 。
5.内联函数与宏定义区别
(1)内联函数在编译时展开,宏在预编译时展开;
(2)内联函数直接嵌入到目标代码中,宏是简单的做文本替换;
(3)内联函数有类型检测、语法判断等功能,而宏没有;
(4)inline函数是函数,宏不是;
(5)宏定义时要注意书写(参数要括起来)否则容易出现歧义,内联函数不会产生歧义;
宏定义有什么作用11一、#define的基本用法
#define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本 。该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义 。
(1)简单的宏定义(不带参数的宏定义)
#define<宏名> <字符串>
例:#define PI 3.1415926