当前位置:  开发笔记 > 编程语言 > 正文

避免C宏中的冗余

如何解决《避免C宏中的冗余》经验,为你挑选了1个好方法。

我在C代码中有一些冗余,我想避免.

// Q15 macros
#define SCALE_FACTOR_Q15 ( 0x00008000UL )
#define Q15_MAX          ( 0x00007FFFUL )
#define f32_Q15_x(x)     ( (f32)(int) ( (float)(x)*(float)SCALE_FACTOR_Q15 ) )
#define f32_Q15_MAX      ( (f32)      ( Q15_MAX )                            )
// etc...

// Q31 macros
#define SCALE_FACTOR_Q31 ( 0x80000000UL )
#define Q31_MAX          ( 0x7FFFFFFFUL )
#define f32_Q31_x(x)     ( (f32)(int) ( (float)(x)*(float)SCALE_FACTOR_Q31 ) )
#define f32_Q31_MAX      ( (f32)      ( Q31_MAX )                            )
// etc...

现在我需要做同样的代码和平Q25,并且将来可能对其他人来说Qx,x在范围内[1,63].

我怎么能避免为每个单独写这个Qx



1> John Zwinck..:

这个怎么样?

#define SCALE_FACTOR_Q(N) ( 1UL << N )
#define Q_MAX(N)          ( SCALE_FACTOR_Q(N) - 1 )
#define f32_Q_x(N,x)      ( (f32)(int) ( (float)(x)*(float)SCALE_FACTOR_Q(N) ) )
#define f32_Q_MAX(N)      ( (f32)Q_MAX(N) )

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有