[英]What is the meaning of second value in return statement in C
我有以下c代碼:
#define ASSERT_ACTIVE(active) do { if (!active) return errno = 6, -1; } while (0);
#define errno (*_errno())
int someCrazyFunc (bool active) {
ASSERT_INACTIVE (active);
...
}
據我所知,# #define
只會放置替換文本來代替指定的標識符。
我想知道:
return errno = 6, -1;
手段? 是在一個return語句中返回兩個值? (*_errno()) = 6
沒有第二個值 - return
語句只返回一個值。 在聲明中:
return errno = 6, -1;
返回值是表達式errno = 6, -1
。 這是一個使用逗號運算符的表達式 - 它被解析為(errno = 6), -1
,其計算結果為-1
並將6
分配給errno
作為副作用。 所以這意味着它等同於兩個語句:
errno = 6;
return -1;
假設_errno()
是一個返回指針的函數 - 例如它的返回類型為int *
- 那么表達式(*_errno()) = 6
將值6
賦給函數返回值指向的對象。 它等同於以下代碼:
int *p = _errno();
*p = 6;
errno
通常被定義為這樣,以便為多線程實現中的每個線程提供自己的errno
。 在這種情況下,函數_errno()
將返回指向當前線程的errno
變量的指針。
這實際上不是return
語句的第二個值,它是逗號運算符。 它的作用是評估逗號兩邊的表達式,但只返回第二個表達式的值。
那么什么return errno = 6, -1;
errno = 6
分別計算表達式errno = 6
和-1
,然后返回第二個表達式-1
的結果,然后return
使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.