ufm: (Default)
[personal profile] ufm
ufm@home ~ $ cat t.c
#include <stdio.h>

int main(void) {
int i;
volatile int j;

   i = j = 5;
   i = ++i + ++i;
   j = ++j + ++j;
   printf ("i == %d j == %d\n",i,j);

   i = j = 5;
   i = i++ + ++i;
   j = j++ + ++j;
   printf ("i == %d j == %d\n",i,j);

   i = j = 5;
   i = i++ + i++;
   j = j++ + j++;
   printf ("i == %d j == %d\n",i,j);

   i = j = 5;
   i = ++i + i++;
   j = ++j + j++;
   printf ("i == %d j == %d\n",i,j);

   return 0;
}

ufm@home ~ $ gcc t.c
ufm@home ~ $ ./a.out
i == 14 j == 13
i == 13 j == 11
i == 12 j == 10
i == 13 j == 12
ufm@home ~ $

(no subject)

Date: 2007-05-12 12:22 (UTC)
From: [identity profile] galkao.livejournal.com
Слушай, а я в С с таким никогда не сталкивалась: volatile int j
Что такое volatile? Либо я была невнимательна, либо в то время, когда я писала на С, такого не было.

(no subject)

Date: 2007-05-12 12:52 (UTC)
From: [identity profile] dil.livejournal.com
Это указание компилятору, что значение переменной может меняться асинхронно (например, по прерыванию), и что он не должен делать никаких предположений относительно ее значения в текущий момент, даже если сам в нее только что чего-нибудь положил.
Существует, кажется, со времен ANSI-стандарта, в K&R его, вроде бы, еще не было.

(no subject)

Date: 2007-05-12 13:12 (UTC)
From: [identity profile] galkao.livejournal.com
"в K&R его, вроде бы, еще не было." - вот я и смотрю, что незнакомое, я же как раз по K&R С изучала:-)