在C中处理动态函数参数

科尔德布

在编写该项目的代码时,我遇到了一个需要能够处理uint8_t,uint16_t和uint32_t变量的函数的情况。

我试图为此找到一个不错的解决方案,以保持动态性,而不会造成很多混乱或大量重复代码,但是最重要的是,拥有一个保存解决方案。

在当前代码中,我使用带有联合的结构作为函数的参数:

typedef struct
{
  DataType type;
  union
  {
    uint8_t uint8;
    uint16_t uint16;
    uint32_t uint32;
  } unsignedInt;
} anySizeUnsignedType;

试图使函数更具动态性,但是现在,我的函数中有2种类型,需要根据第三个变量进行比较。

所以,这基本上就是我想要做的:

anySizeUnsignedType Var1 = arg1;
anySizeUnsignedType Var2 = arg2;
uint8_t comparison = arg3;

switch (comparison)
{

    case ABOVE:

      if (Var1 > Var2 )
      {
        retValue = TRUE;
      }    
      break;

    case EQUAL:

      if (Var1 > (Var2 - AnotherVar)
          && (Var1  < (Var2 + AnotherVar)))

      {
        retValue = TRUE;
      }    
      break;

    case BELOW:
      if (Var1 < Var2 )
      {
        retValue = TRUE;
      }    
      break;

    default:
      /* Should be impossible */
      break;

  }

问题:我无法比较“ Var”,因为它当然是一个结构,我需要比较uint8_t,uint16_t或uint32_t,但是有什么办法可以进行保存,而对于所有3个未签名的对象都没有相同的代码3次类型?

还是总体上有更好的解决方案?或者也许是不想这样做的原因?

我这样做的原因是:处理来自具有不同输出的不同传感器的传感器数据,并保持自己的官方分辨率,

拔示巴

我倾向于使用

int compare(uint32_t arg1, uint32_t arg2, uint8_t comparison)

作为(单)函数,和依赖型加宽的较窄版本arg1arg2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章