Я знаю о значении C-языка Lvalue! Я знаю от 2 до 3 случаев, когда мы получаем эту ошибку! Lvalue означает: требуется левое боковое значение!Lvalue требуется ошибка путаницы?
1) мы получаем, когда мы назначаем константу/литерал константе вместо переменной!
void main()
{
int a;
a = 2;
8 = 7;//Left side value (variable) required!
}
2) с операторами сокращения до и после приращения!
void main()
{
int a = 2;
++a;
a++; //variable value is updating!
++2;
2++; //variable value has to be updatable! not a constant/literal value!
/*
Both pre & post unary operators workflow is Right --> Left.
Compiler treats this is also an assignment, So assignment always
happens to left side only!
That's why in these cases also compiler shows: Lvalue required error!
*/
}
3) сложное заявление!
void main()
{
int a = 2, b;
b = ++a++;
/*
++a++
evaluation is...
1st precedence is pre operator!
So,
++a --> 2 is substituted!
++a++; --> 2++ : variable value has to be updatable! not
a constant value! Lvalue required error!
*/
}
Но как здесь, в этих случаях, мы получаем Lvalue, требуемую ошибку? Ищет более подробную информацию!
main()
{
int a=1, b;
//How come here we get Lvalue required error?
b = a+++++a;
b = a-----a;
//If i give spaces like below, compiler not getting confusion, no error!
b = a++ + ++a;
b = a–- – --a;
//here without spaces also i’m not getting any error!
b = a–-+–-a;
}
Пожалуйста, кто-то дает подробную оценку операторов на этих утверждениях!
//without spaces!
b = a+++++a;
b = a-----a;
b = a--+--a;
//with spaces!
b = a++ + ++a;
b = a-- - --a;
И 'int main()'. Ни один достойный программист не использует 'void' в качестве возвращаемого типа' main() '. –
Вы можете посмотреть сгенерированный код или промежуточное представление компилятора. С помощью GCC попробуйте выполнить компиляцию с помощью 'gcc -Wall -S -O -fverbose-asm' или' gcc -fdump-tree-all' или использовать [MELT-зонд] (http: //gcc-melt.org#probe_id) –