George Danchev wrote:
On Tuesday 18 January 2005 09:24, Nikolay Mitev wrote:Не искам да задълбавам много, но по-принцип, в горния пример според мисленето и смятането на компилатора (или поне както аз си го преставям) всичко е вярно. Изразите имат някакав приоритет на изпълнение и се преобразуват в обратен полски запис и се изчисляват спрямо него. И ето за конкретните примери:
Така това Хубаво, но след като всичко е синтактично правилно защо компила с -Wall не предупреждава за potential undefined behaviour след като го карам една и съща променлива да участва в израза хем преди инкремента и едновременно с това хем след инкремента без да имаме валиден край за statement (;) между тях (sequence poin) ? Това е извадка от по-сложна програма където нещата не са така явни и не е лесно да се track down-не, но се свежда до един такъв подводен камък. (операторите са други разбира се, щото инкремент + декремент няма много смисъл разбира се ;-)
1. a = x++ + ++x;
това се свежда до:
(++х) х=1 (х++) х=1 (тук не се извършва увеличаването) събират се двете и се получава за "а" се получава 2, а след операцията "х" нараства с 1 и става 2
2. x = x++ + ++x;
аналогично на горния пример след операцията х = 2 но допълнитеното (х++) го прави 3.
Не е толкова сложно, но ужасно неразбрано и предпоставка за много грешки.
със Здраве.
============================================================================ A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers). http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html ============================================================================
