C语言深度剖析-笔记

一关键字:

关键字:

1.       static:

C语言关键字32个:

第一个作用:修饰变量。变量又分为局部和全局变量,但它们都存在内存的静态区。由于被
static修饰的变量总是存在内存的静态区,所以即使这个函数运行结束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。

关键字                                         意 义

static int j;

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

void fun1(void)

int                               声明整型变量

{

double                       声明双精度变量

static int i = 0;

long                            声明长整型变量

i++;

char                            声明字符型变量

}

float                           声明浮点型变量

void fun2(void)

short                          声明短整型变量

{

signed                        声明有符号类型变量

j=0;

unsigned                   声明无符号类型变量

j++;

struct                         声明结构体变量

}

union                          声明联合数据类型

int main()

enum                         声明枚举类型

{

static                         声明静态变量

for(k=0; k<10; k++)

switch                        用于开关语句

{

case                           开关语句分支

fun1();

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

fun2();

break                         跳出当前循环

}

register                     声明寄存器变量

return 0;

const                          声明只读变量

第二个作用:修饰函数。函数前加
static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。

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

2 .sizeof

typedef                      用以给数据类型取别名(当然还有其他作用)

         sizeof是关键字不是函数

extern                       
声明变量是在其他文件正声明(也可以看做是引用变量)

  1. signed、unsigned关键字

  2. float变量与“零值”进行比较

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

5.if else语句

void                            声明函数无返回值或无参数,声明空类型指针

         先处理正常情况,再处理异常情况。

continue                    结束当前循环,开始下一轮循环

6.循环语句风格

do                               循环语句的循环体

        
在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放

while                           循环语句的循环条件

在最外层,以减少 CPU 跨切循环层的次数。

if                                  条件语句

  1. void

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

         void不能代表一个真实的变量

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

         void a; //错误

goto                           无条件跳转语句

function(void a); //错误

sizeof                         计算对象所占内存空间大小

8.const

 

         const修饰的只读变量必须在定义的同时初始化,编译器通常不为普通
const只读变量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的值,没有了存储与读内存的操作,使得它的效率也很高。

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

         a)修饰指针

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

const int *p; // p 可变,p指向的对象不可变

存寻址访问以提高效率。

int const *p; // p可变,p指向的对象不可变

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

int*const p; //p不可变,p指向的对象可变

static:这个关键字在 C 语言里主要有两个作用。

const int *const p; //指针 p和 p指向的对象都不可变

第一个作用:修饰变量。变量又分为局部和全局变量,但它们都存在内存的静态区。

b)修饰函数参数

静态全局变量,作用域仅限于变量被定义的文件中,其他文件即使用 extern
声明也没法

const修饰符也可以修饰函数的参数,当不希望这个参数值被函数体内意外改变时使

使用他。准确地说作用域是从定义之处开始,到文件结尾处结束,在定义之处前面的那些

用。例如:

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

void Fun(const int i);

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

9.extern

函数也用不了。由于被 static
修饰的变量总是存在内存的静态区,所以即使这个函数运行结束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。

        
extern就相当于他们的这些区别于中国人的特性。extern可以置于变量或者函数前,以

 

标示变量或者函数的定义在别的文件中。

第二个作用:修饰函数。函数前加 static
使得函数成为静态函数。函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。

       

 

10.struct

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

         空结构体的大小就定位 1个byte。struct的成员默认情况下属性是
public的,而class成员却是 private的。

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

11.union

【规则
1-3】当标识符由多个词组成时,每个词的第一个字母大写,其余全部小写。

        
union维护足够的空间来置放多个数据成员中的“一种”,而不是为每一个数据成员配置空间,在union中所有的数据成员共用一个空间,同一时间只能储存其中一个数据成员,所有的数据成员具有相同的起始地址。例子如下:

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

union StateMachine

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

{

【规则
1-5】对在多个文件之间共同使用的全局变量或函数要加范围限定符(建议使用模块名(缩写)作为范围限定符)。

char character;

【规则 1-6】标识符名分为两部分:规范标识符前缀(后缀) + 含义标识
。非全局变量可以不用使用范围限定符前缀。

int number;

【规则 1-7】作用域前缀命名规则。

char *str;

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

double exp;

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

};

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

一个 union只配置一个足够大的空间以来容纳最大长度的数据成员.

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

 

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

12 typedef

风格这些应与项目中一致,与项目开发成员共同约定并在详细设计文档中给出

       

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

 

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

 

这块内存,它的值可能是无效的数据。

二预处理

【规则
1-15】不同类型数据之间的运算要注意精度扩展问题,一般低精度数据将向高精度

1.#if

数据扩展。

         #if
的一般含义是如果#if后面的常量表达式为true,则编译它与#endif之间的代码,否则跳过这些代码。命令#endif
标识一个#if块的结束。#else命令的功能有点象 C语言中的 else
,#else建立另一选择(在#if 失败的情况下)。#elif命令意义与 else if
相同,它形成一个 if else-if阶梯状语句,可进行多种编译选择。

 

 

sizeof:sizeof
在计算变量所占空间大小时,括号可以省略,而计算类型(模子)大小时不能省略。

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。