004010678A4DF1movcl,byteptr[ebp-0Fh]
0040106A884DFCmovbyteptr[ebp-4],cl
11:a=p[1];
0040106D8B55ECmovedx,dwordptr[ebp-14h]
004010708A4201moval,byteptr[edx+1]
004010738845FCmovbyteptr[ebp-4],al
第一种在读取时直接就把字符串中的元素读到寄存器 cl 中,而第二种则要先把指针值读到
edx 中,在根据 edx 读取字符,显然慢了。
21、什么是预编译,何时需要预编译?
答:预编译又称为预处理,是做些代码文本的替换工作。处理#开头的指令,比如拷贝#include
包含的文件代码,#define 宏定义的替换,条件编译等,就是为编译做的预备工作的阶段,主
要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,
可以放在程序中的任何位置。
c 编译系统在对程序进行通常的编译之前,先进行预处理。c 提供的预处理功能主要有以下
三种:1)宏定义 2)文件包含 3)条件编译
1、 总是使用不经常改动的大型代码体。
2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这
种情况下,可以将所有包含文件预编译为一个预编译头。
22、关键字 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 呢?我也如下的几下理由:
1). 关键字 const 的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数
为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理其它人留下的垃
圾,你就会很快学会感谢这点多余的信息。(当然,懂得用 const 的程序员很少会留下的垃
圾让别人来清理的。)
2). 通过给优化器一些附加的信息,使用关键字 const 也许能产生更紧凑的代码。
3). 合理地使用关键字 const 可以使编译器很自然地保护那些不希望被改变的参数,防止其
评论0
最新资源