簡體   English   中英

如何將size_t和pid_t與int比較

[英]How to compare size_t and pid_t with int

size_tpid_t類型中使用邏輯運算符的正確方法是什么? 我的意思是:寫以下內容合法嗎?
例如:

size_t sz;  
/* some kind of assignment */  
if(sz > 0){  
  /* do something */  
}  

例如:

void f(pid_t pid,...){  
  if(pid > 0){  
    /* do something */  
  }  
  /* ... */  
}

..還是我必須做一些演員?

編輯
好的答案;
現在,考慮到所講的內容,有人可以給我理由以這種方式進行編碼:

void *my_malloc(size_t size){
  if(size <= 0){
    return NULL;
  }
  /* something else... */
}  

我的老師寫了那個代碼。
是否有意義?
我不知道為size_t類型保留多少位(取決於實現)
但是肯定是一個未簽名的(您的答案),那么為什么要使用上面的表達式?

是的,這是合法的。 在進行比較之前, >兩個參數都將被提升為匹配類型。

請注意,對於無符號類型(例如size_t> 0表示與!= 0相同。

size_tpid_t實際上是不同pid_t的整數值-是的。

據我了解,它們背后的全部意思是, size_tpid_t的風格可能在實現,操作系統和體系結構(例如32位v 64位)之間有所不同。

在C中,size_t是無符號類型,其大小是int類型對基礎體系結構的接受大小。

由於C是弱類型的,因此您可以將帶符號的整數分配給size_t類型。 正確使用類型的責任部分在於程序員。

在您的情況下,由於您將size_t類型比較為零,所以很好。 嘗試將其與負數進行比較。 您會感到驚訝。

只要您記住將int值隱式轉換為無符號類型(因為size_t是無符號的),就可以將size_t值與int值進行比較沒有問題。

由於上述原因,當您在比較中混合帶符號和無符號類型時,某些編譯器將發出警告。 在這種情況下,為了消除警告,您必須將帶符號的值顯式轉換為適當的無符號類型。 但是,當有符號值是非負編譯時常量時,這些編譯器通常不會發出任何警告,這意味着在您的示例中,無需將顯式0 0U為無符號類型(或使用0U )。

暫無
暫無

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

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