将值与void *进行比较

时间:2017-05-29 12:27:24

标签: c debugging pointers

我想比较一个值,传递给void *,可以是char / short / long类型和常量long类型。 但是这段代码没有用。我不明白。

void compar (void* p_value) {
    if (*p_value > CONST_MAX) {
        *p_value = CONST_MAX;

     } else if( *p_value<CONST_MIN ) {
         *p_value = CONST_MIN;
     }
}

THX。

4 个答案:

答案 0 :(得分:4)

最好将您的功能签名更改为:

#define TYPE_INT 1
#define TYPE_LONG 2

void compar (void* p_value, int type){

然后根据类型,投出&#34;&#34;&#34;传递(或指向的东西)到类型并进行比较。

答案 1 :(得分:3)

如果没有gcc扩展名或C11标准,您无法知道C语言中变量的类型(this link处的更多信息)。顺便说一下,这种问题经常通过另一个带有变量类型的参数来解决。

答案 2 :(得分:1)

void*是指向任何的指针。比较运算符需要知道您要比较的内容,然后才能将其编译成有意义的处理器进行处理。

有几种方法可以为您解决 1)使用宏(因此它将其内联比较 - 无空*)
2)将类型传递给比较fn
3)为每种比较类型编写不同的功能
4)在将所有内容传递给函数之前将其转换为(int)并完全忘记void指针。这不是他们的目的。

答案 3 :(得分:0)

如果该代码块是您调用该方法进行比较的较大代码的一部分,那么它应该不是问题,因为当您调用该代码块时,它也应该传递p_value应该的数据类型。但实际上,p_value已经是????所以它不能正确编译。