/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
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.



Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste