如何检查数组的元素是int还是float?

时间:2014-01-05 21:10:16

标签: c arrays

我有2个数组,其中一个是注释,我想制作通用printf来绘制值:

int values [] = { 88, 56, 100, 2, 25 };
//float values[] = {88.5f, 56.5f, 100.0f, 2.234f, 88.12f};

if (value[0] is int) {
    for(i; i < 5; ++i)
    printf("%d ", *(values + i));
} else {
    for(i; i < 5; ++i)
    printf("%f ", *(values + i));
}

有什么方法可以检查吗?例如,当我想查看元素是char还是int时,我使用了sizeof

2 个答案:

答案 0 :(得分:3)

需要注意的是,在调试程序时,您只能使用“功能”,这是很复杂的,您可以使用C11的_Generic构造:

_Generic(values[0], int: 0, float:1, default:2)

你可能应该做的事情更符合你的意图是条件编译:

#define FLOAT_CASE

#ifdef FLOAT_CASE
float values[] = {88.5f, 56.5f, 100.0f, 2.234f, 88.12f};
#else
int values [] = { 88, 56, 100, 2, 25 };
#endif

... // all the code that is independent of the type of values here

for(i; i < 5; ++i)
#ifdef FLOAT_CASE
  printf("%f ", *(values + i));
#else
  printf("%d ", *(values + i));
#endif

答案 1 :(得分:2)

一个丑陋的解决方案:如果您只需要在int和float之间进行区分,则可以为变量分配一个非整数值,例如0.1,然后测试实际值。这给出了类似的东西:

#define IS_INT_TYPE(x) (x=0.1, x==0)

但是,这会破坏宏参数的原始值。如果使用gcc,则可以使用typeof()扩展来强制转换值:

#define IS_INT_TYPE(x) (((typeof(x)) 0.1) == 0)

Pascal的笔记给了我解决方案的想法:

#define IS_INT_TYPE(x) (((x*0+1)/2) == 0)