Macros 检查typedef别名的值
我正在尝试编写一些DSP代码,这些代码需要在浮点和定点环境中运行,数字类型将在编译时确定。我想使用宏或typedef为特定的数字类型别名。乘法、除法和其他数学函数在实现中会因数值类型的不同而有很大的不同,因此我需要某种类型的开关来确定是否包含某些头,或者根据数值类型更改实现 我将给出一个简短的代码片段作为示例Macros 检查typedef别名的值,macros,switch-statement,signal-processing,typedef,numeric,Macros,Switch Statement,Signal Processing,Typedef,Numeric,我正在尝试编写一些DSP代码,这些代码需要在浮点和定点环境中运行,数字类型将在编译时确定。我想使用宏或typedef为特定的数字类型别名。乘法、除法和其他数学函数在实现中会因数值类型的不同而有很大的不同,因此我需要某种类型的开关来确定是否包含某些头,或者根据数值类型更改实现 我将给出一个简短的代码片段作为示例 typedef samp_t float; // or #define samp_t float (bad naming practice?) // An alternative in
typedef samp_t float;
// or #define samp_t float (bad naming practice?)
// An alternative in fixed point
samp_t multiply_samp_t(samp_t a, samp_t b){
return a*b;
}
/* typedef samp_t int;
#define RADIX 24
samp_t multiply_samp_t(samp_t a, samp_t b){
return (samp_t) ((long) a)*((long) b) >> RADIX);
}
*/
void main(void){
samp_t a,b,c;
a = 15;
b = 27;
c = multiply_samp_t(a,b);
}
那么,如何根据samp_t的类型在两个不同的乘法函数之间切换呢?欢迎提出任何建议或建议。
谢谢
-Brant以下是在编译时选择与数据类型对应的函数的示例:
#define SYSTEM_FLOAT 0
#define SYSTEM_INT 1
// main selection
#define TYPE_SYSTEM FLOAT
#if TYPE_SYSTEM == SYSTEM_FLOAT
#define SAMP_T float
#define mult_samp_t mult_samp_t_float
#elif TYPE_SYSTEM == SYSTEM_INT
#define SAMP_T int
#define mult_samp_t mult_samp_t_int
#elif ...
#endif
void main(void){
SAMP_T a,b,c;
a = 15;
b = 27;
c = mult_samp_t(a,b);
}
必须在代码中的某个地方定义:
float mult_samp_t_float(float a, float b)
{
...
return a float;
}
float mult_samp_t_int(int a, int b)
{
...
return an int;
}
也就是说,您选择的类型系统将设置要使用的整个函数集。
不过,我仍然建议,只有在无法处理运行时选择和函数时才使用此方案,因为我在这里介绍的方式使代码更难调试,尽管我过去从未遇到过问题
我在专业操作系统的代码中遇到了更糟糕的事情:-谢谢!这使我大致了解了如何进行。我希望看到一个typedef版本,如果这样的东西存在,尽管我怀疑它是否存在,因为据我所知,检查typedef的存在是不可能的。