c语言

2019-03-19  本文已影响0人  gcrisis

类型是内存中空间大小的别名;

变量是内存中一段连续空间的别名;

auto使用栈空间,局部变量;

register使用cpu寄存器,不一定分配成功,局部变量;

static使用静态区,static可以是局部的也可以本文件全局的。static作用于函数可以限制该函数只在本文件中有效。

if语句

如果是布尔类型,if条件不需要比较,直接使用。

如果与常量进行相等比较,将常量放在==左边,好处是如果由于疏忽少了一个=编译器会报错,否则这个错误很难发现。

float类型相等比较一般采用精度范围比较,这是由于float设计上就不是很精确。

do{}while(0)很有用,如下图所示。这样可以避免多个返回,是的程序调理,可读性强、易于维护。

c语言

函数中资源的分配一般都位于函数开始处,资源的回收位于函数的结尾处,易于维护,防止内存泄漏。

goto弃用

没有void变量,有void指针变量,void指针变量可以接受任意类型的指针变量,反过来需要强制转换。

extern “C” {}括号内按照标准c编译。gcc编译这段会报错,g++可以正常编译通过。

sizeof不是函数,其在编译阶段已经处理好,不是在运行时处理的,加括号只是习惯做法,对于变量可以不加括号,但是对于类型需要加。

const

const只在编译时有效,运行时无效。可以通过指针改变const类型的变量。const修饰的数组是不可被改变的,现代编译器编译后如果出现这种问题会crash。

const修饰指针,const出现在*左边,指针指向的数据不可变,const出现在*右边,指针本身不可变。即左数右指。

const修饰函数参数,表示函数体内不能改变参数的值。

const修饰函数返回值,表示返回值不能被修改。多用于返回指针的情况。

volatile

可理解为编译器警告指示字,告诉编译器必须去内存取变量,而不要作优化。主要用于修饰被多进程线程访问的变量。在嵌入式中中断可能会改变一个变量的值,这个变量必须用volatile修饰。

结构体

空结构体大小不同编译器结果不同,有0也有1,1比较合理。

可以用结构体定义柔性数组。结构体中数组没有大小,只占位不分配空间。之后可以使用malloc分配空间。

c语言

union分配最大数据类型的空间,受系统大小端影响,可以利用这个特性判断系统的大小端。

方法:在union中定义一个int和char,给int赋值(小于255),判断char是不是也是这个值。

enum

真正的常量,在前一个值上加一,有类型可调试。定义常量尽量用enum。

typedef

给已存在的类型起别名。注意与define区别。

上一篇 下一篇

猜你喜欢

热点阅读