Re: lug-bg: c/cpp incr/decr
- Subject: Re: lug-bg: c/cpp incr/decr
- From: George Danchev <danchev@xxxxxxxxx>
- Date: Tue, 18 Jan 2005 13:39:46 +0200
On Tuesday 18 January 2005 13:05, George Danchev wrote:
--cut--
> > [roam@straylight ~/c/misc/foo]> ./prec
> > (a++) + b = 6
> > a + (++b) = 7
> > a+++b = 6
> > [roam@straylight ~/c/misc/foo]>
> >
> > Това е резултат от изпълнението на следната програма:
> >
> > #include <stdio.h>
> >
> > int main(void)
> > {
> > int a, b, c;
> >
> > a = 1; b = 5;
> > c = (a++) + b;
> > printf("(a++) + b = %d\n", c);
> >
> > a = 1; b = 5;
> > c = a + (++b);
> > printf("a + (++b) = %d\n", c);
> >
> > a = 1; b = 5;
> > c = a+++b;
> > printf("a+++b = %d\n", c);
> >
> > return (0);
> > }
а забравих да кажа, че tendracc каза същото (да кажем, че неговия парсър
спазва ANSI C, ISO, POSIX1, POSIX2, XPG3, XPG4, SVID3, UNIX95.... каквото се
сетите, въпреки, че не е ясно колко оптимален обектен код възпроизвежда) ...
#include <stdio.h>
int main()
{
int x, a, b;
x = a = b = 5 ;
x = a+++b;
printf("a+++b = %d\n", x );
x = a = b = 5 ;
printf("a+++b = %d\n", a+++b );
return 0;
}
Аналогично и gcc и tendracc казват, че това е 10, т.е. a+++b е всъщност
(a++)+b ... но това е супер ясно и безинтересно като поведение ;-)
--
pub 4096R/0E4BD0AB 2003-03-18 <danchev.fccf.net/key pgp.mit.edu>
fingerprint 1AE7 7C66 0A26 5BFF DF22 5D55 1C57 0C89 0E4B D0AB
============================================================================
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
============================================================================
|