Code:
# define TWICE(i) 2*i
# define TWO(i) i+i
main ()
{
int no, sum, product;
no = 1;
sum = -- TWICE(no);
--sum;
product = --TWo(no);
printf (“%d%d\n”, sum, product);
}
wat does it mean???
|
Go4Expert Member
|
|
| 17Nov2012,20:52 | #1 |
|
Code:
# define TWICE(i) 2*i
# define TWO(i) i+i
main ()
{
int no, sum, product;
no = 1;
sum = -- TWICE(no);
--sum;
product = --TWo(no);
printf (“%d%d\n”, sum, product);
}
wat does it mean??? |
|
Mentor
|
![]() |
| 18Nov2012,13:59 | #2 |
|
It means you aren't using #defines and the predecrement operator correctly.
--TWICE(no) expands to --2*no and you can't predecrement a constant. However, in the case of TWICE, even brackets don't fix the problem because --(2*no) still won't work because 2*no is not an lvalue. An lvalue ("left value") is something you can put on the left of an assign, so in i=5, i is the lvalue and this is valid because you can assign a value to it. 5=i is invalid because you can't assign a value to 5. (2*no)=7 is invalid because you can't assign a value to (2*no). --TWO(no) will "work" - in the sense that it won't throw an error, but you're still abusing the -- operator. This will expand to --i+i which gives undefined results. |
|
Go4Expert Member
|
|
| 18Nov2012,16:09 | #3 |
|
Thank u for giving me a clear view..
|