c语言中11 10等于多少,C中如何定义11=1?C中如何定义11=10 爱问知识人

使用宏定义

在C语言中,宏是产生内嵌代码的唯一方法。对于嵌入式系统而言,为了能达到性能要求,宏是一种很好的代替函数的方法。

写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个:

错误做法:

#define MIN(A,B)  ( A <= B ? A : B )

正确做法:

#define MIN(A,B) ((A)<= (B) ? (A) : (B) )

对于宏,我们需要知道三点:

(1)宏定义"像"函数;

(2)宏定义不是函数,因而需要括上所有"参数";

(3)宏定义可能产生副作用。

下面的代码:

least = MIN(*p++, b);

将被替换为:

( (*p++) <= (b) ?(*p++):(b) )

发生的事情无法预料。

因而不要给宏定义传入有副作用的"参数"。

使用寄存器变量

当对一个变量频繁被读写时,需要反复访问内存,从而花费大量的存取时间。

为此,C语言提供了一种变量,即寄存器变量。这种变量存放在CPU的寄存器中,使用时,不需要访问内存,而直接从寄存器中读写,从而提高效率。寄存器变量的说明符是register。对于循环次数较多的循环控制变量及循环体内反复使用的变量均可定义为寄存器变量,而循环计数是应用寄存器变量的最好候选者。

(1) 只有局部自动变量和形参才可以定义为寄存器变量。因为寄存器变量属于动态存储方式,凡需要采用静态存储方式的量都不能定义为寄存器变量,包括:模块间全局变量、模块内全局变量、局部static变量;

(2) register是一个"建议"型关键字,意指程序建议该变量放在寄存器中,但最终该变量可能因为条件不满足并未成为寄存器变量,而是被放在了存储器中,但编译器中并不报错(在C++语言中有另一个"建议"型关键字:inline)。

下面是一个采用寄存器变量的例子:

/* 求1+2+3+…。+n的值 */

WORD Addition(BYTE n)

{

register i,s=0;

for(i=1;i<=n;i++)

{

s=s+i;

}

return s;

}

本程序循环n次,i和s都被频繁使用,因此可定义为寄存器变量。

内嵌汇编

程序中对时间要求苛刻的部分可以用内嵌汇编来重写,以带来速度上的显著提高。但是,开发和测试汇编代码是一件辛苦的工作,它将花费更长的时间,因而要慎重选择要用汇编的部分。

在程序中,存在一个80-20原则,即20%的程序消耗了80%的运行时间,因而我们要改进效率,最主要是考虑改进那20%的代码。

嵌入式C程序中主要使用在线汇编,即在C程序中直接插入_asm{ }内嵌汇编语句:

/* 把两个输入参数的值相加,结果存放到另外一个全局变量中 */

int result;

void Add(long a, long *b)

{

_asm

{

MOV AX, a

MOV BX, b

ADD AX, [BX]

MOV result, AX

}

}。

全部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值