[英]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.