簡體   English   中英

C中return語句中第二個值的含義是什么?

[英]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.

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