关键字、结构体总结以及typedef,枚举与#define区别

关键字

register关键字

1、作用:请求编译器尽量将变量保存在CPU内部寄存器里,可以省去CPU从内存中抓取数据的时间,从而提高运行效率

2、我们可以将频繁使用的变量修饰为register变量

3、register使用注意点:①register只能修饰局部变量,不能修饰全局变量(因为全局变量被多个进程访问,如果当前进程将变量修饰为register,其他进程去不知道,从而不能修饰局部变量)  ②不能用&来获取一个register修饰变量的地址  ③register修饰变量一定是一个CPU所接受的数据类型

 

static关键字

static可以修饰变量和函数。修饰函数时,表明这个函数只可以在本文件内调用,不能在其他文件中调用,其修饰变量时可修饰局部变量和全局变量。修饰局部变量的时候,可延长局部变量的生命周期,到程序运行结束后释放,修饰全局变量时,这个变量只可在本文件可见,其它文件不可调用

 

extern关键字

外部声明(需要标注变量的类型),这个变量一般在另一个文件中,extern一般用来修饰全局变量或者函数

 

const关键字

const修饰的变量称为只读变量,修饰一个变量代表其空间是可变的,不能通过变量名修改变量的值。Const修饰时要对变量进行初始化

  

typedef

对一个数据类型进行改名字操作,可提高代码的移植性,可把复杂类型变成简单的类型,或者起到注释的作用

 

结构体

作用:封装数据,把不同的数据类型封装到一起

数组名用:strcpystu.name,”zhansan”)

结构体指针用->


宏:用来避免出现幻数,注意定义是能清晰的表明其用途(预处理阶段)

函数式宏定义=宏函数

自定义函数与和宏函数区别:宏定义省去了分配和释放栈帧,传参,传返回值等工作,但宏函数不安全,宏定义不做语法检查(宏函数用编译时间换内存空间)

 

用内存空间来换运行时间的例子:inline(只能修饰函数)为内敛函数

条件编译:防止头文件重复包含带来的重复定义

 

浮点型的赋值:if(x>=EPSINON)&&(x<=EPSINON)  EPSINON为允许的误差

指针的赋值:ifp==NULL

死循环:while1for( ; ; )

switch case注意break default一定要写,其匹配的类型为整型和字符

 

内存空洞:注意要将相同的数据类型放到一起


typedef#define的区别:

为了尽可能地兼容,一般都遵循#define定义“可读”的常量以及一些宏语句的任务,而typedef则常用来定义关键字、冗长的类型的别名。typedef故名思意就是类型定义的意思,但是它并不是定义一个新的类型而是给已有的类型起一个别名,在这一点上与引用的含义类似,引用是变量或对象的别名,而typedef定义的是类型的别名

宏定义只是简单的字符串代换(原地扩展),而typedef则不是原地扩展,它的新名字具有一定的封装性,以致于新命名的标识符具有更易定义变

量的功能

1执行时间不同

关键字typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能。

#define则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查。

2 功能有差异

typedef用来定义类型的别名,定义与平台无关的数据类型,与struct的结合使用等。

#define不只是可以为类型取别名,还可以定义常量、变量、编译开关等。

 3 作用域不同

#define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用。

typedef有自己的作用域。

 

枚举与#define区别

1)#define 宏常量是在预编译阶段进行简单替换。枚举常量则是在编译的时候确定其值。
2)一般在编译器里,可以调试枚举常量,但是不能调试宏常量。
3)枚举可以一次定义大量相关的常量,而#define 宏一次只能定义一个

4)从数据的类型看:#define可以编译任意类型的常量,而枚举只能是定义整型常量。

5)从可维护性来看:枚举可以集中管理数据,具相同属性的整形数据可使用枚举,枚举可实现取值的自增,也可指定每个枚举的值,编写代码跟容易,相对来说能减少出错的机会,也便于代码的后期维护和修改。

 

 volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值。当要求使用volatile声明变量值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。精确地说就是,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问;如果不使用valatile,则编译器将对所声明的语句进行优化。(简洁的说就是:volatile关键词影响编译器编译的结果,用volatile声明的变量表示该变量随时可能发生变化,与该变量有关的运算,不要进行编译优化,以免出错)

 


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值