2017-01-22 4 views
-6

В чем разница междуLvalue требуется в качестве левого операнда назначения в С программой

c=a%2;

и

a%2=c;

Я получаю эту ошибку для второго:

именующего выражения, необходимого в качестве левого операнда присваивания

+1

Что вы ожидаете от результата второго? – JVApen

+0

, он присваивает значение остатка (когда id делится на 2) на c. еще ученик –

+4

Левая вещь - это назначенная, а не правильная. – JVApen

ответ

6

Назначения в C и C++ всегда форм

assigned = to_assign;

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

Допускается c = a % 2, но a % 2 = c нет. Последний попытается присвоить ca % 2.

Очень неофициально, вы не можете иметь a % 2 с левой стороны задания, так как вы не можете взять его адрес. Говоря довольно неформально, вы можете думать о назначении как lvalue = rvalue, где lvalue означает «левое значение», а rvalue означает «правильное значение». Это объясняет сообщение об ошибке, сообщаемое вашим компилятором.

+0

. спасибо за помощь –

+0

Предложение: 'всегда в форме ... для _base_types_'. Хотя это соглашение, которое предпочтительнее сохранять, оно может быть отменено, например, DSL. Без них у нас не было бы 'boost :: spirit <>'. – lorro

+0

@lorro: У меня есть серьезные сомнения в том, что это происходит в C! – Olaf

Смежные вопросы