Saturday, 5 July 2014

Expressions ( Part1 )

Expressions (C-FAQ's)



Q1: Can you explain

                   iNum = iNum++ * iNum++      expression result is undefined , but

                   iNum = iNum++ || iNum++    result is always same?


           


            Output:        
                                According to the C standard an object's stored value can be modified only once between two sequence points.

                        Sequence points occurs at following places:-
                                    1)        at the end of full expression( which is not a sub expression ).
                                    2)        at && , || and ?: operators.
                                    3)        at a function call, after evaluation of all the arguments, just before the actual call.
                       
                        So first expression is being modified twice between sequence points, that is why behavior is undefined. But the second expression is getting modified once before sequence point || and once after that.


Q2: Can you rewrite the following expression?

          iNum1 <= 50 ? iNum2=100 : iNum2=200;

         


            Output:        
                        The above expression can be rewrite as :-
                                    iNum2 = iNum1 <= 50 ? 100:200 ;
                       

Q3: Can you rewrite the following expression?

          iNum1 <=50 ? iNum2=200: iNum3=200;


         



            Output:
                        The above expression can be rewrite as:-
                                    *( ( iNum1 <= 50 ) ? &iNum2 : &iNum3 ) = 200 ;

Q4: What is the output of the following code?


            int main()

            {

                        int iNum=2;

                        printf("%d %d\n ", ++iNum, ++iNum );

                                               

                        return 0;

            }

 

            A.        3 4

            B.        4 3

            C.        4 4

            D.        Output may vary from compiler to compiler.

               

           


            Output:
                        D.        Output may vary from compiler to compiler
      4 4 (In GCC Compiler)      




<< PREV               [C FAQ's]            NEXT >>