[英]How am I supposed to use *status in waitpid(pid_t pid, int *status, int options)?
[英]How to compare size_t and pid_t with int
在size_t
和pid_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_t
和pid_t
實際上是不同pid_t
的整數值-是的。
據我了解,它們背后的全部意思是, size_t
和pid_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.