簡體   English   中英

避免C宏中的冗余

[英]Avoiding redundancy in C macros

我在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執行相同的代碼Q25 ,並且將來可能需要其他Qx ,其中x在范圍[1,63]

我怎么能避免為每個Qx單獨寫這個?

這個怎么樣?

#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) )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM