Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macros 检查typedef别名的值_Macros_Switch Statement_Signal Processing_Typedef_Numeric - Fatal编程技术网

Macros 检查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

我正在尝试编写一些DSP代码,这些代码需要在浮点和定点环境中运行,数字类型将在编译时确定。我想使用宏或typedef为特定的数字类型别名。乘法、除法和其他数学函数在实现中会因数值类型的不同而有很大的不同,因此我需要某种类型的开关来确定是否包含某些头,或者根据数值类型更改实现

我将给出一个简短的代码片段作为示例

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的存在是不可能的。