C语言深度分析-笔记

union大小端情势判断:

union                          阐明联合数据类型

switch                        用于开关语句

else                            条件语句否定分支(与 if 连用)

case 后边只可以是整型或字符型的常量或常量表明式

enum                         阐明枚举类型

{

 

float                           讲明浮点型变量

 

【规则
1-3】当标识符由多少个词组成时,每个词的率先个字母大写,其它全部大写。

sizeof                         总括对象所占内存空间大小

{

         char c;

register:这一个至关首要字请求编译器尽可能的将变量存在 CPU
内部寄存器中而不是透过内

 

在编辑代码是,要使得正规意况的实践代码清晰,确认这些不常暴发的卓殊情状处理

        
节省上空,防止不必要的内存分配,同时进步效能,(不分配存储空间,是一个编译期间的值)

         int a[];

 

 

int i;

int a = return ; 那么a = r0的值。

 

这块内存,它的值可能是无济于事的数码。

【规则 1-6】标识符名分为两有些:规范标识符前缀(后缀) + 含义标识
。非全局变量可以绝不拔取限制限定符前缀。

第二个效用:修饰函数。函数前加 static
使得函数成为静态函数。函数的功效域仅局限于本文件(所以又称其中函数)。使用其中函数的利益是:不同的人编写不同的函数时,不用顾虑自己定义的函数,是否会与其他文件中的函数同名。

static:这多少个第一字在 C 语言里根本有多少个成效。

 

C语言关键字32个:

malloc
()函数举行内存的动态分配,并且分配的内存应该不止结构的轻重缓急,以适应柔性数组

【规则 1-17】先拍卖常规情状,再处理相当情形。

静态局部变量,在函数体里面定义的,就只能在那些函数里用了,同一个文档中的其他

代码行也不能够运用它。想要使用就得在眼前再加 extern ***。

【规则 1-11】一个函数名禁止被用于其他之处。

register 变量必须是一个单个的值,并且其长度应低于或等于整型的长度。 而且
register 变量可能不存放在内存中, 所以不可能用取址运算符“ &”来得到register 变量的地点。

if                                  条件语句

 

【规则 1-10】程序中不得出现仅靠大小写区分的貌似的标识符。

 

do                               循环语句的循环体

static                         阐明静态变量

goto                           无条件跳转语句

构中的柔性数组成员前面必须至少一个任何成员。柔性数组成员同意结构中带有一个轻重可

【规则 1-38】 return
语句不可重临指向“栈内存”的“指针”,因为该内存在函数体停止时被机关销毁。

关键字:

C99
中,结构中的最后一个元素允许是雾里看花尺寸的数组,那就叫做柔性数组成员,但结

} c;

 

typedef                      用以给数据类型取别名(当然还有此外效能)

case 语句后边是不可以可以是 const 修饰的只读变量

【规则 1-21】按字母或数字顺序排列各条 case 语句。

for                               一种循环语句(可意会不可言传)

int const *p; //const 修饰*p,p 是指针, *p 是指针指向的对象,不可变

sizeof(int) *p的意味是sizeof(int)的值乘于p

union check

【规则 1-22】把健康情况放在面前,而把异常意况放在前面。

const int *p; //const 修饰*p,p 是指针, *p 是指针指向的目的,不可变

静态全局变量,效能域仅限于变量被定义的公文中,其他文件即拔取 extern
注明也无奈

return                        子程序重回语句(可以带参数,也可不带参数)

const int *const p; //前一个 const 修饰*p,后一个 const 修饰 p,指针 p
和 p 指向的对象

函数也用持续。由于被 static
修饰的变量总是存在内存的静态区,所以尽管这一个函数运行为止,这个静态变量的值仍旧不会被销毁,函数下次利用时依旧能用到那些值。

short                          注明短整型变量

编译器用空格代替原先的笺注

{

【规则
1-9】含义标识命名规则,变量命名使用名词性词组,函数命名使用动词性词组。

extern                       
讲明变量是在任何文件正讲明(也足以视作是援引变量)

【规则
1-12】所有宏定义、枚举常数、只读变量全用大写字母命名,用下划线分割单词。

long                            讲明长整型变量

struct                         表明结构体变量

空指令尽量用NULL;而不是一个支行;要令人通晓这里不进行如何操作。

 

Signed + unsigned = unsigned

break                         跳出当前轮回

 

int checkSystem( )

}

const                          阐明只读变量

代码不会遮掩正常的推行路径。这样对于代码的可读性和属性都很重点。

register                     讲明寄存器变量

 

存寻址访问以提升效能。

volatile                      表明变量在程序执行中可被隐含地改变

void *pvid; pvoid++;ANSI错误 GNU正确

case                           开关语句分支

【规则 1-34】即便函数无参数,那么应讲明其参数为 void
因为部分编译器无参数可以编译通过

由此,即便const volatile int i =
10;定义没错,然则这么的定义尚无什么样实际的含义。

 

int *const p; //const 修饰 p, p 不可变, p 指向的靶子可变

【规则 1-4】尽量避免名字中冒出数字编号,如 Value1,Value2
等,除非逻辑上实在需要编

【规则 1-7】功能域前缀命名规则。

auto                           声明自动变量,缺省时编译器一般默认为 auto

signed                        表明有号子类型变量

int j = 1; extern double j; //这样行呢?为何? 可以,extern只是宣称

auto:编译器在默认的缺省意况下,所有变量都是auto的。

char ch;

 

const: 定义 const 只读变量,具有不可变性。

}aa; 

【规则 1-23】按执行功能排列 case 语句

关键字                                         意 义

struct: 空结构 sizeof为1;

 

号。比如驱动开发时为管脚命名,非编号名字反而不佳。

continue语句只用在for、while、do-while等循环体中,
常与if条件语句一起利用, 用来增速循环。无法利用在switch中。

&a不是指向指针的指针,因为&a和a的值非凡,不过*&a和*a的值不等于。*&a和a的值一样,表明*&a仅仅是对这个数组指针举行了取值,取得的是数组的值,即数组首元素的地点,而不是对&a这一个地址举行了取值。那几个理应是c语言中针对数组指针运算的确定。

const Stu_pst stu3; Stu_pst是项目大概,修饰指针。

unsigned                   申明无符号类型变量

         const
定义的只读变量在程序运行过程中只有一份拷贝(因为它是全局的只读变量,存放在静态区),而#define
定义的宏常量在内存中有好两个拷贝。

continue                    截止目前轮回,最先下一轮循环

double                       阐明双精度变量

【规则
1-14】定义变量的同时千万千万别忘了起初化。定义变量时编译器并不一定清空了

先是个效益:修饰变量。变量又分为局部和全局变量,但它们都留存内存的静态区。

void                            声明函数无再次回到值或无参数,阐明空类型指针

sizeof(aa)为4;

return (c.ch ==1);

sizeof:sizeof
在测算变量所占空间大刻钟,括号可以省略,而计量类型(模子)大刻钟无法大概。

行使她。准确地说功用域是从定义之处开头,到文件结尾处截止,在概念之处后边的那么些

【规则 1-8】数据类型前缀命名规则。

char                            表明字符型变量

 

都不可变

【规则
1-15】不同档次数据里面的演算要留意精度扩张问题,一般低精度数据将向高精度

数量增添。

extern void fun( void);//两个 void 可否省略?可以,函数默认是int

int                               注解整型变量

extern int i; //写成 i = 10;行吧? 全局可以,全局变量默认是extern  
局部不行

c.i = 1;

int a[100] sizeof(a) = 400 sizeof(&a) = 400 sizeof(&a[0]) = 4

【规则 1-13】考虑到习惯性问题,局部变量中可采取通用的命名形式,仅限于
n、 i、 j 等作为循环变量使用。

的预想大小。typedef struct

【规则 1-24】简化每种情景相应的操作。

作风这多少个应与类型中平等,与项目支付成员一道约定并在事无巨细规划文档中提交

default                       开关语句中的“其他”分支

变的数组。sizeof
重回的这种结构大小不包括柔性数组的内存。包含柔性数组成员的社团用

【规则 1-2】命名的尺寸应当符合“min-length && max-information”原则。

return;
在ARM里面重临的r是r0,此外芯片不领悟,需要查一下寄存器程序调用规则,

【规则 1-1】命名应当直观且可以拼读,可望文知意,便于记念和读书。

【规则
1-5】对在五个文件之间联合利用的全局变量或函数要加范围限定符(指出使用模块名(缩写)作为限制限定符)。

volatile :const volatile int i= 10;实际上此注明表示的发明了一个const
int型的变量,所以i是只读变量,不能被改动。同时i又被volatile修饰了,意思乃是不同意编译器优化代码,在代码中老是用到i时都要一贯从内存中去取数。

while                           循环语句的巡回条件