(++i)*(++i)

Jan Kurik kurik na reax.cz
Pátek Leden 29 16:43:43 CET 1999


> myslite si, ze je v C mozno pouzit (s jednoznacne definovanym
>vysledkem) konstrukci ze Subjectu - (++i)*(++i)? Pri zkompilovani
>gcc 2.7.2.3 i egcs-1.03 je vysledek druha mocnina, coz neni to, co bych
>si predstavoval. Pritom po nahrazeni ++i za i+=1, coz by melo byt
>ekvivalentni, je vysledek v poradku - pro nejake puvodni i to vrati
>(i+1)*(i+2).


    Tak jsem to vyzkousel a mam jine vysledky nez Vy (gcc 2.7.2.3). Napsal
jsem si nasledujici program :

<C code BEGIN>
#include <stdio.h>

void main()
{                                                   
        int i = 10;                                 
                                                    
        printf("(i++)*(i++) = %i\n", (i++)*(i++));  
        i = 10;                                     
        printf("(i+1)*(i+1) = %i\n", (i+1)*(i+1));  
        printf("(i+1)*(i+2) = %i\n", (i+1)*(i+2));  
        printf("(i+2)*(i+2) = %i\n", (i+2)*(i+2));  
        printf("(++i)*(++i) = %i\n", (++i)*(++i));  
};
< C code END>

no a vysledky :

(i++)*(i++) = 100
(i+1)*(i+1) = 121
(i+1)*(i+2) = 132
(i+2)*(i+2) = 144
(++i)*(++i) = 144

takze konstrukce >>(++i)*(++i)<< udela totez co >>(i+2)*(i+2)<<, coz je podle mne vzhledem k priorite zavorek OK. Zkusil jsem to i na "MS VisualC++ 5.0" a vysledky byly stejne.


Jan Kurik <kurik na reax.cz>






Další informace o konferenci Linux