python做后台网站的多吗,dedecms网站管理系统,淄博网站seo,企业网站建设的技术指标和经济指标define
#define命令是C语言中的一个宏定义命令#xff0c;它用来讲一个标识符定义为一个字符串#xff0c;该标识符被称为宏名#xff0c;被定义的字符串称为替换文本。该命令有两种格式#xff1a;一种是简单的宏定义#xff08;不带参数的宏定义#xff09;#xff0…define
#define命令是C语言中的一个宏定义命令它用来讲一个标识符定义为一个字符串该标识符被称为宏名被定义的字符串称为替换文本。该命令有两种格式一种是简单的宏定义不带参数的宏定义另一种是带参数的宏定义。 格式#define 宏名/标识符 字符串
eg:#define PI 3.1415926 说明 ①宏名一般用大写 ②宏定义末尾不加分好; ③可以用#undef命令终止宏定义的作用域 ④宏定义可以嵌套 ⑤字符串“”中永远不包含宏 ⑥宏替换在编译前进行不分配内存变量定义分配内存函数调用在编译后程序运行时进行并且分配内存 ⑦预处理是在编译之前的处理而编译工作的任务之一就是语法检查预处理不做语法检查 ⑧使用宏可提高程序的通用性和易读性减少不一致性减少输入错误和便于修改。例如数组大小常用宏定义 2 带参数的宏定义除了一般的字符串替换还要做参数代换
格式#define 宏名(参数表) 字符串
eg:#define S(a,b) a*b
areaS(3,2);
第一步被换为areaab;第二步换为area32;
一个标识符被宏定义后该标识符便是一个宏名。这时在程序中出现的是宏名在该程序被编译前先将宏名用被定义的字符串替换这称为宏替换替换后才进行编译宏替换是简单的替换。
使用带参数的宏定义可完成函数调用的功能又能减少系统开销提高运行效率。宏定义可完成简单的操作但复杂的操作还是要由函数调用来完成而且宏定义所占用的目标代码空间相对较大在使用时要根据具体情况来看。
枚举
enum是C语言中的一个关键字enum叫枚举数据类型枚举数据类型描述的是一组整型值的集合这句话其实不太妥当枚举型是预处理指令#define的替代枚举和宏其实非常类似宏在预处理阶段将名字替换成对应的值枚举在编译阶段将名字替换成对应的值
enum DAY
{
MON1, TUE, WED, THU, FRI, SAT, SUN
};需要注意的两点是
枚举列表中的 Mon、Tues、Wed 这些标识符的作用范围是全局的不能再定义与它们名字相同的变量。Mon、Tues、Wed 等都是常量不能对它们赋值只能将它们的值赋给其他的变量。
枚举和宏其实非常类似宏在预处理阶段将名字替换成对应的值枚举在编译阶段将名字替换成对应的值。我们可以将枚举理解为编译阶段的宏。
/* 定义枚举类型 */
enum DAY { MON1, TUE, WED, THU, FRI, SAT, SUN };
void main()
{
/* 使用枚举类型声明变量再对枚举型变量赋值 */
enum DAY yesterday, today, tomorrow;
yesterday MON;
today TUE;
tomorrow WED;枚举变量的大小
枚举类型在存储时是按照int型存储的在我的系统中也就是4字节方式存储
枚举与#define 宏的区别
1#define 宏常量是在预编译阶段进行简单替换。枚举常量则是在编译的时候确定其值。所以枚举可以进行类型检查
2一般在编译器里可以调试枚举常量但是不能调试宏常量。
3枚举可以一次定义大量相关的常量而#define 宏一次只能定义一个。
const
const是constant的简写用来定义常量它限定一个变量不允许被改变产生静态作用。const最开始推出的目的是为了取代预编译指令取长补短。
与define的对比 define是预编译指令定义的宏是在预处理阶段展开的而const是普通变量的定义是只读变量且是在编译运行阶段使用的。 define定义的是常量define定义的宏在编译后消失了它不占用内存而const定义的常变量本质上仍然是一个变量具有变量的基本属性有类型、占用存储单元除了不能作为数组的长度用const定义的常变量具有宏的优点而且使用更方便。 define定义的对象没有数据类型编译器只能机械地进行字符替换没有类型安全检查即会出现“边际问题”或者是“括号问题”。而const定义的是变量有数据类型。
如果一定要用全局变量应该尽量的使用const进行修饰防止不必要的人为修改使用 const 修饰过的局部变量就有了静态特性它的生存周期也是程序运行的整个过程虽然有了静态特性但并不是说它变成了静态变量。
const类对象只能调用const成员函数
内联
在C语言中如果一些函数被频繁调用不断地有函数入栈即函数栈会造成栈空间或栈内存的大量消耗。 为了解决这个问题特别的引入了inline修饰符表示为内联函数。 栈空间就是指放置程式的局部数据也就是函数内数据的内存空间在系统下栈空间是有限的假如频繁大量的使用就会造成因栈空间不足所造成的程式出错的问题函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。。 关键字inline 必须与函数定义体放在一起才能使函数成为内联仅将inline 放在函数声明前面不起任何作用。 inline只是一种建议真正用不用得靠编译器来决定而且inline只适合涵数体内代码简单的函数数使用不能包含复杂的结构控制语句例如while、switch并且内联函数本身不能是直接递归函数。
内联是以代码膨胀复制为代价仅仅省去了函数调用的开销从而提高函数的执行效率。如果执行函数体内代码的时间相比于函数调用的开销较大那么效率的收获会很少。另一方面每一处内联函数的调用都要复制代码将使程序的总代码量增大消耗更多的内存空间。
内联函数是在编译时展开而宏在预编译时展开在编译的时候内联函数直接被嵌入到目标代码中去而宏只是一个简单的文本替换。 内联函数可以进行诸如类型安全检查、语句是否正确等编译功能宏不具有这样的功能宏不是函数而inline是函数