если (Expr, Expr) структура в C? - PullRequest
0 голосов
/ 20 ноября 2010

Кто-нибудь знает, что является логическим средством структуры if (Expr, Expr) в C? как:

if(lcn = (ULONG)GetLCN(index),lcn)

Ответы [ 4 ]

9 голосов
/ 20 ноября 2010

Если у вас есть «,», выражение вычисляется до последнего выражения в списке.

Итак: 1,3 == 3.

Это также можно интерпретировать как:

lcn = (ULONG)GetLCN(index);
if (lcn) { .... }

Почему они это сделали, я не могу сказать.

5 голосов
/ 20 ноября 2010

Вы видите оператор запятой в действии.Если у вас есть

if(expr1, expr2)...

*, 1006 * оценивается и отбрасывается, а значение expr2 используется в операторе if.

2 голосов
/ 20 ноября 2010

Вы видите оператор запятой в действии.

В основном все выражения, кроме последнего, оцениваются, но их результаты отбрасываются;затем последний вычисляется и возвращается в остальное выражение.

Итак, в вашем случае lcn устанавливается, а затем проверяется (в операторе if).

2 голосов
/ 20 ноября 2010

a, b вычисляет сначала a, затем b, и все выражение имеет значение b.Например, (false, true) оценивается как true.

Выражение, которое вы даете в качестве примера, имеет значение lcn после выполнения присваивания.То же самое может быть написано if ((var = func())) (более часто в скобках скрываются предупреждения компилятора, защищающие от случайного использования = вместо ==).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...