Что является результатом выражения присваивания в C?

В следующем коде:

int c;
while((c=10)>0)

Что оценивает c = 10? Является ли это 1, который указывает, что значение 10 присвоено переменной с успешно, или это 10? Почему?

Ответ 1

c = 10 - выражение, возвращающее 10, которое также назначает от 10 до c.

Ответ 2

Присвоение возвращается с назначенным значением. В случае, если c=10 равно 10. Так как 10!= 0, в c это означает также true, так что это бесконечный цикл.

Это похоже на то, что вы пишете

while(10)

Плюс Вы выполнили задание.

Если вы следуете этой логике, вы можете видеть, что

while(c=0)

будет циклом, который никогда не выполняет свой оператор или блок.

Ответ 3

Это бесконечный цикл. Сначала он назначает от 10 до c, затем сравнивает его с c > 0, затем снова запускает цикл, назначает от 10 до c, сравнивает его с c > 0 и так далее. Петля никогда не заканчивается. Это эквивалентно следующему:

while(c=10);

/* Because c assign a garbage value, but not true for all cases maybe it assign 0 */
while(c); 

Изменить: Он не вернет 10, потому что компилятор возвращает только значение true или false, поэтому он возвращает true или 1 вместо 10.

Ответ 4

while((c=10)>0)

c = 10 должен вернуть 10.

Теперь, для while(10>0) 10>0, оператор > возвращает 1 (ненулевое значение).

Ответ 5

В C99 сказано: 6.5.16

An assignment operator stores a value in the object designated by the left operand. An        
assignment expression has the value of the left operand after the assignment, but is not an 
lvalue.