这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 一个有趣的关于C宏的题目及巧解

共5条 1/1 1 跳转至

一个有趣的关于C宏的题目及巧解

高工
2009-02-17 12:36:33     打赏

一个有趣的关于C宏的题目及巧解。(建议您不要看答案,先尝试自己做做看)

定义一个C宏,实现插入0~255个NOP指令。
几天后公布答案。
比如:_nopx(3);// 插入3个NOP
 


(建议您不要看答案,先尝试自己做做看。做完后向下翻看的答案。)

……

……

……

……

……

……

……

……

……

(不要偷看答案!)

……

……

……

……

……

……

……

……

……

……

(你确定要看答案吗?)

……

……

……

……

……

……

……

……

……

……

……

……

……

(好吧,现在公布答案。)

//宏定义方法:
#define __NOP1__ asm("nop");
#define __NOP2__ __NOP1__ __NOP1__
#define __NOP4__ __NOP2__ __NOP2__
#define __NOP8__ __NOP4__ __NOP4__
#define __NOP16__ __NOP8__ __NOP8__
#define __NOP32__ __NOP16__ __NOP16__
#define __NOP64__ __NOP32__ __NOP32__
#define __NOP128__ __NOP64__ __NOP64__


#define __NOPX__(a)             \
    if ((a)&(0x01))    {__NOP1__}                    \
    if ((a)&(0x02))    {__NOP2__}                    \
    if ((a)&(0x04))    {__NOP4__}                    \
    if ((a)&(0x08))    {__NOP8__}                    \
    if ((a)&(0x10))    {__NOP16__}                    \
    if ((a)&(0x20))    {__NOP32__}                    \
    if ((a)&(0x40))    {__NOP64__}                    \
    if ((a)&(0x80))    {__NOP128__}                   

//宏引用方法(举例):

    __NOPX__(13)

//编译结果:
138:                   __NOPX__(13)
  051D    0000     NOP
  051E    0000     NOP
  051F    0000     NOP
  0520    0000     NOP
  0521    0000     NOP
  0522    0000     NOP
  0523    0000     NOP
  0524    0000     NOP
  0525    0000     NOP
  0526    0000     NOP
  0527    0000     NOP
  0528    0000     NOP
  0529    0000     NOP

//说明,此宏在PICC中编译通过
//转自匠人的百宝箱




关键词: 一个     有趣     关于     题目     巧解    

院士
2009-02-19 10:28:58     打赏
2楼
Jason_Zhang还有些情趣的说~~~

高工
2009-02-19 12:17:05     打赏
3楼
只不过是在枯燥的技术和平凡的生活中自娱自乐罢了。

高工
2009-02-21 15:51:58     打赏
4楼
数学中的递归算法啊,呵呵,用的巧。

高工
2009-02-24 17:53:26     打赏
5楼
宏的递归展开,确实是很巧啊。

共5条 1/1 1 跳转至

回复

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