打印

嵌入式C/C++语言精华**集锦

[复制链接]
1683|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sinadz|  楼主 | 2011-2-22 19:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
嵌入式C/C++语言精华文章集锦
下面是部分内容
C 语言高效编程的几招
编写高效简洁的C 语言代码,是许多软件工程师追求的目标。本文就工作中的一些体会和经验做相关的阐述,不对的地方

各位指教。
第1 招:以空间换时间
计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决
问题
的第1 招--以空间换时间。
例如:字符串的赋值。
方法A,通常的办法:
#define LEN 32
char string1 [LEN];
memset (string1,0,LEN);
strcpy (string1,"This is an example!!"
方法B:
const char string2[LEN]="This is an example!"
char*cp;
cp=string2;
(使用的时候可以直接用指针来操作。)
从上面的例子可以看出,A 和B 的效率是不能比的。在同样的存储空间下,B 直接使用指针就可以操作了,而A 需要调用
两个字符函数才能完成。B 的缺点在于灵活性没有A 好。在需要频繁更改一个字符串内容的时候,A 具有更好的灵活性;
如果采用方法B,则需要预存许多字符串,虽然占用了 大量的内存,但是获得了程序执行的高效率。

4. 嵌入式系统中经常要用到无限循环,你怎么样用C 编写死循环呢?
16
这个问题用几个解决方案。我首选的方案是:
while(1)
{
?}
一些程序员更喜欢如下方案:
for(;;)
{
?}
这个实现方式让我为难,因为这个语法没有确切表达到底怎么回事。如果一个应试者给出这个作为方案,我将用这个作为一个机会去探究他们
这样做的基本原理。如果他们的基本答案是:"我被教着这样做,但从没有想到过为什么。"这会给我留下一个坏印象。
第三个方案是用 goto
Loop:
...
goto Loop;
应试者如给出上面的方案,这说明或者他是一个汇编语言程序员(这也许是好事)或者他是一个想进入新领域的BASIC/FORTRAN 程序员。



Static
6. 关键字static 的作用是什么?
这个简单的问题很少有人能回答完全。在C 语言中,关键字static 有三个明显的作用:
•; 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
•; 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变
量。
•; 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然
不懂得本地化数据和代码范围的好处和重要性。
Const
7.关键字const 有什么含意?
我只要一听到被面试者说:"const 意味着常数",我就知道我正在和一个业余者打交道。去年Dan Saks 已经在他的文章里完全概括了const
的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const 能做什么和不能做什么.如果你从没有
读到那篇文章,只要能说出const 意味着"只读"就可以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道
更详细的答案,仔细读一下Saks 的文章吧。)
如果应试者能正确回答这个问题,我将问他一个附加的问题:
下面的声明都是什么意思?
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
/******/
前两个的作用是一样,a 是一个常整型数。第三个意味着a 是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。第四个
意思a 是一个指向整型数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。最后一个意味着a 是一个指向常整
型数的常指针(也就是说,指针指向的整型数是不可修改的,同时指针也是不可修改的)。如果应试者能正确回答这些问题,那么他就给我留
下了一个好印象。顺带提一句,也许你可能会问,即使不用关键字const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关
键字const 呢?我也如下的几下理由:
•; 关键字const 的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果
你曾花很多时间清理其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const 的程序员很少会留下的垃圾让别人来清
理的。)
•; 通过给优化器一些附加的信息,使用关键字const 也许能产生更紧凑的代码。
•; 合理地使用关键字const 可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug
的出现。
本文来自电子工程师之家:http://www.eehome.cn/read.php?tid=28762

嵌入式C精华.rar

1.51 MB

相关帖子

沙发
xsgy123| | 2011-2-22 21:49 | 只看该作者
资料不错,很有参考价值

使用特权

评论回复
板凳
bit6019| | 2011-2-23 12:37 | 只看该作者
非常好的资料

使用特权

评论回复
地板
gxgclg| | 2011-2-23 16:31 | 只看该作者
还不错的资料

使用特权

评论回复
5
baidudz| | 2011-2-23 18:47 | 只看该作者
有些参考价值

使用特权

评论回复
6
linux达人| | 2011-2-23 19:35 | 只看该作者
唉,前天去面试嵌入式工程师,笔试题中一体就是“关键字static 的作用是什么”;要是早看见你这份资料就好了,就能完完全全写出来了。

使用特权

评论回复
7
txcy| | 2011-2-23 20:39 | 只看该作者
的确是很实用的资料

使用特权

评论回复
8
hsbjb| | 2011-2-24 09:58 | 只看该作者
其中的有些问题,的确是面试所需

使用特权

评论回复
9
无冕之王| | 2011-2-24 15:48 | 只看该作者
弄清其中的一些问题,对找嵌入式相关的工作还是很有帮助的

使用特权

评论回复
10
yybj| | 2011-2-24 19:33 | 只看该作者
这个资料对学习嵌入式还是挺有用的

使用特权

评论回复
11
火箭球迷| | 2011-2-25 10:10 | 只看该作者
很实用的资料,好多嵌入式岗位的面试都会问到

使用特权

评论回复
12
bit6019| | 2011-2-25 16:21 | 只看该作者
很不错,收下慢慢看

使用特权

评论回复
13
pkat| | 2011-2-25 16:43 | 只看该作者
很常见的一些问题,弄清楚很重要

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

304

主题

2313

帖子

0

粉丝