簡體   English   中英

將值與void *比較

[英]Compare a value with void*

我想比較一個值,用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;
     }
}

謝謝。

最好將函數簽名更改為:

#define TYPE_INT 1
#define TYPE_LONG 2

void compar (void* p_value, int type){

然后根據類型,將傳遞的“事物”(或指向的事物)轉換為類型並進行比較。

沒有gcc擴展名或C11標准,您將無法知道C語言中變量的類型( 此鏈接上的更多信息)。 順便說一句,此類問題通常通過傳遞帶有變量類型的另一個參數來解決。

void*是指向任何東西的指針。 比較運算符需要先了解您正在比較的內容,然后才能將其編譯為有意義的內容以供處理器處理。

有幾種方法可以為您解決。
1)使用宏(因此它可以內聯比較-無空*)
2)將類型傳遞給比較fn
3)為每種比較類型編寫不同的功能
4)將所有內容強制轉換為(int),然后再將其傳遞給函數,並完全忽略void指針。 這不是他們的目的。

如果該代碼塊是您在其中調用該方法進行比較的較大代碼的一部分,那么這應該不成問題,因為當您調用該代碼塊時,它也應該傳遞數據類型p_value。 但實際上,p_value has是???? 因此它將無法正確編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM