这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 再议你所熟知的C语言关键字

共23条 1/3 1 2 3 跳转至

再议你所熟知的C语言关键字

高工
2013-12-01 18:21:27     打赏

再议static的作用

在C语言中,static有三个明显的作用:

1、 在函数体,一个被声明为静态的变量,在这一函数被调用过程中维持其值不变。

2、 在模块内(在函数体外),一个被声明为静态的变量可以被模块内所有函数访问,但不能被模块外其他函数访问,他是一个本地的全局变量。

3、 在模块内,一个被声明为静态的函数,只可以被这一模块内的其他函数调用,那就是,这个函数被限制在声明他的模块的本地范围内使用。

总结:意图在于强调:本地化数据和本地化代码范围的好处和重要性。

再议 const 含义是什么?

Const意味着“只读“或”常量“。请看如下代码:

const int a;

int const a;

const int *a;

int * const a;

int const * a const;

前两个的作用是一样,a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个意思a是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。

为什么如此看重关键字const

1). 关键字const的作用是为给读代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉用户这个参数的应用目的。

2). 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。

3). 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。

关键字volatile有什么含意

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:

1). 并行设备的硬件寄存器(如:状态寄存器)

2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)

3). 多线程应用中被几个任务共享的变量

volatile的重要性。

1). 一个参数既可以是const还可以是volatile吗?解释为什么。

2). 一个指针可以是volatile 吗?解释为什么。

3). 下面的函数有什么错误:

int square(volatile int *ptr)

{

return *ptr * *ptr;

}

答案:

1). 是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。

2). 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。

3). 这段代码的有个恶作剧。这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码:

int square(volatile int *ptr)

{

int a,b;

a = *ptr;

b = *ptr;

return a * b;

}

由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下:

long square(volatile int *ptr)

{

int a;

a = *ptr;

return a * a;

}




关键词: C语言     关键字    

高工
2013-12-01 22:27:56     打赏
2楼
C语言,深似海啊。

高工
2013-12-01 22:29:56     打赏
3楼
需要花精力去学习啊

高工
2013-12-02 00:17:43     打赏
4楼

C语言里的精华,感觉好多地方都会考到,平时注意的太少了


院士
2013-12-02 09:12:28     打赏
5楼
是不是搞一个C语言的培训呢?

高工
2013-12-02 09:27:22     打赏
6楼
考的全是基础的东西,有些面试中还被问到过呢

专家
2013-12-02 09:45:53     打赏
7楼
笔试中最常见的问题,尤其是这三个关于变量的声明含义

高工
2013-12-02 12:02:19     打赏
8楼
有时候记着记着就忘了。。。

高工
2013-12-02 12:37:57     打赏
9楼
需要经常用啊

高工
2013-12-02 14:48:23     打赏
10楼
是啊,可怜俺总是忙一段时间硬件忙一段时间软件,搞来搞去就忘了。。。

共23条 1/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]