Автор Гілка: Ініціація змінних в С  (Прочитано 1733 раз)

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
Про те, що коли йде присвоювання одній і тій же змінній в одному виразі більше одного разу - можуть бути коники, я знаю. А от цікаво чи ініціюються величини точно в тому ж порядку, як записані?
На приклад
void foo(int a,int b,int c)
{
int d=a+b;
float e=(float)d+(float)c;
...
}

Чи не можна в такому разі нарватись на неприємності?
Edit:
#include <stdio.h>
float foo(float a,float b,float c)
{
float d=a+b,e=d/c;
return e;
}
int main()
{
float a,b,c;
printf("a,b,c: ");
scanf("%f %f %f",&a,&b,&c);
printf("foo: %f\n",foo(a,b,c));
return 0;
}
Наче не глюче, але хто його знає чи неглючність тут є жорсткою чи ймовірнісною ...
« Змінено: 2009-03-18 11:27:21 від serg_ik »
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
Re: Ініціація змінних в С
« Відповідей #1 : 2009-03-18 13:46:30 »
Трохи позбочувався в гарному тоні
$ tail -n33 sfd.c
MF SFD_calc_chi2(SFD * self)
{
  if(self->sigma)
  {
    MF *Ae = self->Exp, *Am = self->Mod, *sig2 = self->sigma2;
    int i, N = self->Nq;
    MF res = 0.l;

    for(i = 0; i < N; i++)
    {
      MF diff;

      diff = Ae[i] - Am[i];
      res += dif * dif / sig2[i];
    }
    return res;
  }
  else
  {
    MF *Ae = self->Exp, *Am = self->Mod;
    int i, N = self->Nq;
    MF res = 0.l;

    for(i = 0; i < N; i++)
    {
      MF diff;

      diff = Ae[i] - Am[i];
      res += dif * dif;
    }
    return res;
  }
}

Якщо Лінукс написали студенти - нехай вони під ним і навчаються.