ViktorMedlem sedan aug. 20021 752 inlägg Har sett 2 program nu där man har typ
void kalle()
{
printf("Hej hopp!");
{
printf("Hej hopp igen!");
printf("Kalle!");
}
printf("Anka");
}
Varför har man hakar runt en kod section som inte måste ha hakar runt sig??
/Viktor
Marcus EMedlem sedan maj 20021 466 inlägg För att dela in koden i oberoende sektioner. Båda sektionerna utnyttjar kanske varaibler med samma namn fast av olika typ.
Namnen måste i så fall ändras för att det ska gå att ta bort klamrarna. I ditt exmpel är klamrarna meningslösa.
ViktorMedlem sedan aug. 20021 752 inlägg Altså om man vill göra något sånthär,
void kalle()
{
{
int tmp=5;
printf("%d",tmp);
}
char tmp='k';
printf("%c",tmp);
/Viktor
Nu rörde ju din fråga C och inte C++. Men det kan vara värt att nämna en vanlig anledning för scope i C++, nämligen att objekt lever inom ett scope, och att destructorer körs när man går ur scopet
void kalle()
{
CMyFirstClass c1;
{
CMySecondClass c2;
// ...
} // när man går ur detta scope körs c2:s destructor
// ...
} // när man går ur detta scope körs c1:s destructor
PeWMedlem sedan juni 200010 432 inlägg ... vilket samtidigt påpekades i de kurser jag gått, som klart olämpligt pga att det genererar ful och oläslig kod.
PeW skrev:
... vilket samtidigt påpekades i de kurser jag gått, som klart olämpligt pga att det genererar ful och oläslig kod.
Håller inte riktigt med om det ;). Men fortfarande gäller ju att man håller funktioner korta. Att dela in i flera scope gör man inte för att logiskt gruppera långa kodavsnitt, utan för att se till bestämma livstid på objekt (att köra destruktorer vid rätt tillfällen), och min erfarenhet är att det leder till färre fel.
Vilka alternativ har ni diskuterat?
ViktorMedlem sedan aug. 20021 752 inlägg
developer skrev:
Vilka alternativ har ni diskuterat?
delete/free måste väll vara ett alternativ? Då får man väll samma effekt?
Att det ser fult ut måste jag hålla med om, det skulle vara snyggare om man kunde sätta en lable på klamrarna.
/Viktor
Ja, men new/delete har flera nackdelar. Dels allokerar man på heapen istället för stacken, vilket ger sämre prestanda (eftersom man med new ägnar tid åt att leta i lista över lediga minnesblock och med delete sätter in i ledig-listan) och ofta sämre CPU-skalbarhet (dvs om man stoppar i fler processorer i datorn går det ändå inte fortare). Dessutom måste man själv se till att hantera eventulla exceptions, eftersom man annars inte kommer köra delete. Med ett scope är man garanterad att destructorn körs även om man kastar exception.
> ...sätta en lable på klamrarna
Det finns IDE:er som gör att man kan expandera kod-block, vilket underlättar något.
developer:
Du måste inte nödvändigtvis använda dig av standart new/delete.
Det går ju faktiskt att skriva dina egna allokerings/deallokerings funkrioner för new och delete.