Поддерживает ли C множественное присваивание типа a, b = 0, 1, как это делает python? - PullRequest
0 голосов
/ 04 сентября 2018
""" Sample python code representing multiple assignment """
a , b = 0 , 1
print a , b

Следующий код дает вывод: 0 1 и, очевидно, не вызывает никаких ошибок. C поддерживает то же самое?

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

C не поддерживает списочные назначения, как Python. Вам необходимо присвоить каждой переменной отдельно:

a = 0; b = 1;
0 голосов
/ 04 сентября 2018

Нет, C не поддерживает множественное присваивание и не поддерживает языковые уровни для кортежей.

a, b = 0, 1;

Выше, с учетом оператора приоритет , эквивалентно:

a, (b = 0), 1;

Что эквивалентно:

b = 0;

См. в прямом эфире на колиру .


Ближайший C-эквивалент к вашему коду Python будет:

a = 0, b = 1;

В этом случае использование значения выражения присваивания бесполезно.

0 голосов
/ 04 сентября 2018

Нет C не поддерживает несколько назначений, как это.

Компиляция проходит, поскольку a , b = 0 , 1 сгруппировано как a, (b = 0), 1. a и 1 - неиспользуемые выражения, но все еще допустимые выражения; выражение эквивалентно

b = 0

с a без изменений.

Интересно, что вы можете достичь желаемой нотации в C ++ с некоторой изобретательностью и небольшим изменением синтаксиса.

...