www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

ANSI C & integer promotion

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programiranje embedded sistemov
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
alessio
Član
Član



Pridružen-a: Pon 04 Dec 2006 8:39
Prispevkov: 363
Aktiv.: 1.61
Kraj: Ljubljana

PrispevekObjavljeno: Sre Nov 12, 2008 11:15 pm    Naslov sporočila:  ANSI C & integer promotion Odgovori s citatom

Kaj bi odgovorili, kaj izpiše spodnji program, brez da ga prevedete in zaženete? Think

Koda:
#include <stdio.h>

int main(void)
{
  unsigned int i = 3;
  signed int j = -20;
 
  if ((i+j ) > 0)
     printf("Result positive.");
  else
     printf("Result negative.");

  return 0;
}


Ali zna kdo razložit, zakaj po ANSI C standardu
operacija z predznačenimi in nepredzančenimi spremenljivkami
vrne nepredznačen rezultat? Intuitivno bi jaz prej rekel, da bi prej bilo obratno.

Z lintanjem kode se seveda najde težava, z GCC prevajalnikom in opcijo -Wall kot tudi z ARM prevajalnikom pa ne...
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
multicopy
Član
Član



Pridružen-a: Ned 25 Feb 2007 23:26
Prispevkov: 43
Aktiv.: 0.19
Kraj: Ljubljana - okolica

PrispevekObjavljeno: Čet Nov 13, 2008 8:58 am    Naslov sporočila:  Re: ANSI C & integer promotion Odgovori s citatom

alessio je napisal/a:
Kaj bi odgovorili, kaj izpiše spodnji program, brez da ga prevedete in zaženete? Think

Koda:
#include <stdio.h>

int main(void)
{
  unsigned int i = 3;
  signed int j = -20;
 
  if ((i+j ) > 0)
     printf("Result positive.");
  else
     printf("Result negative.");

  return 0;
}


Ali zna kdo razložit, zakaj po ANSI C standardu
operacija z predznačenimi in nepredzančenimi spremenljivkami
vrne nepredznačen rezultat? Intuitivno bi jaz prej rekel, da bi prej bilo obratno.

Z lintanjem kode se seveda najde težava, z GCC prevajalnikom in opcijo -Wall kot tudi z ARM prevajalnikom pa ne...


Definicija jezika C je takšna, da nekatere avtomatske type conversions - to je tiste, ki niso narejeni z cast, naredi sila neintuitivno, zlasti pri aritmetičnih izrazih v katerih nastopajo. Točen odgovor boš zagotovo našel v knjigi C Programming Language (2nd Edition) (Prentice Hall Software) (Paperback) by Brian W. Kernighan (Author), Dennis M. Ritchie (Author) , ki se jo da najti tudi kot PDF, mislim, da sem nekoč pred 20 leti sam naletel na identično stvar in odgovor je bil v citirani knjigi.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programiranje embedded sistemov Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 492 dni


Powered by phpBB © 2001, 2005 phpBB Group