|
| moralsk støtte Fra : Troels Thomsen |
Dato : 22-11-04 17:00 |
|
Er dette ikke standard c, der burde virke på alle ædruelige
implementationer, incl embedded
unsigned int a = 100;
unsigned char b;
b = a +1; // compliant c , ikke ? Dog oftest med warning
b = (unsigned char)(a +1); // præcist det samme som ovenstående ?
void someFunction( unsigned char asdf);
asdf (a+1) // stadig compliant c, asdf kaldes med værdien 101
Hvis jeg har ret, hvad vil argumentet så være, formuleret i mere officielle
termer?
Hvis jeg skulle forsøge vha L (left - location) og R (right - are)
begreberne, mener jeg jo at det er kompilerens opgave at få værdien (are)
ind i den angivede variabel (location). Og det må den så gøre med passende
viden om endianess, signed representation, etc.
Kan det gå galt ?
(ud over hvis kompileren er defekt)
tpt
| |
Niels Dybdahl (23-11-2004)
| Kommentar Fra : Niels Dybdahl |
Dato : 23-11-04 09:41 |
|
> unsigned int a = 100;
> unsigned char b;
> b = a +1; // compliant c , ikke ? Dog oftest med warning
Jeg er ikke sikker på at "//" til kommentarer er med i gamle C standarder.
> b = (unsigned char)(a +1); // præcist det samme som ovenstående ?
> void someFunction( unsigned char asdf);
Funktionsprototyper er vist heller ikke med i gamle C-standarder. Jeg har
hørt at det er noget som er blevet hugget fra C++.
Desuden må funktionsprototyper vist ikke stå midt i anden kode.
> asdf (a+1) // stadig compliant c, asdf kaldes med værdien 101
Niels Dybdahl
| |
Troels Thomsen (23-11-2004)
| Kommentar Fra : Troels Thomsen |
Dato : 23-11-04 11:09 |
|
Jeg gjorde sådan:
b = a +1;
og blev irettesat af en "c expert" at jeg skulle gøre sådan
b = (unsigned char)(a +1);
for at det var korrekt c.
???
| |
Brian Schelde (23-11-2004)
| Kommentar Fra : Brian Schelde |
Dato : 23-11-04 11:48 |
|
"Troels Thomsen" <troels.thomsen@mailteledk> wrote in message
news:41a30c60$0$287$edfadb0f@dread11.news.tele.dk...
> Jeg gjorde sådan:
> b = a +1;
> og blev irettesat af en "c expert" at jeg skulle gøre sådan
> b = (unsigned char)(a +1);
> for at det var korrekt c.
Han har på sin vis også ret, da man i det første tilfælde ofte får en
warning (alt efter hvordan ens compiler er configureret). De fleste vil
gerne helt undgå at have warnings i deres programmer da en warning ofte
fortæller at der er et eller andet der ikke er tænkt over i koden.
Når du signer den fortæller du compileren at du godt ved at det tal du vil
lægge i variablen b kan være for stort ved at caste den til samme type som b
variablen og du får derfor ikke en warning.
Men du har ret i at der vil ske nøjagtig det samme når man kører programmet.
| |
Brian Schelde (23-11-2004)
| Kommentar Fra : Brian Schelde |
Dato : 23-11-04 14:07 |
|
"Brian Schelde" <br_sc@hotmail.com> wrote in message
news:41a31567$0$69570$edfadb0f@dread15.news.tele.dk...
> Når du signer den fortæller du compileren...
Jeg mente selvfølgelig caste den.
| |
|
|