Thread: Q: C++ loops
-
27-03-2005, 20:58 #16Member
- Registered
- 09/08/02
- Location
- Hasselt
- Posts
- 239
- iTrader
- 4 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 0/0
no votes
-
-
28-03-2005, 01:39 #17Member
- Registered
- 13/11/04
- Posts
- 62
- iTrader
- 0
- Mentioned
- 0 Post(s)
huh? is da ni gewoon onderdeel van gestandaardiseerde C++? is da echt afhankelijk van uw platform?
no votes
-
28-03-2005, 03:10 #18
Bij de meeste compilers kan je dit doen:
Maar bij andere compilers kan dat een error geven omdat die compiler "i" twee keer in dezelfde scope gedeclareerd ziet. Ik weet niet 100% zeker wat standaard is, maar ik denk dat bovenstaande code standaard is (vermits GCC dat toelaat).Code:for (int i=0; i<max; ++i) { // eerste lus } for (int i=0; i<max; ++i) { // tweede lus }[LifeIsDigital.net] - Mijn artikels, open source software en projecten!no votes
-
28-03-2005, 03:51 #19Member
- Registered
- 13/11/04
- Posts
- 62
- iTrader
- 0
- Mentioned
- 0 Post(s)
aah, de VC++ 6.0 bug dus
nu ja, kzet mn for loop altijd nog es apart tussen haakskes om zo'n dingen te voorkomen
no votes
-
28-03-2005, 12:43 #20
Bij mij geeft het altijd errors als ik de var declare in de for loop, daarom:
Grote kans dat de compiler de "i" in de register steekt dan, dit is vooral handig bij enorme loops, niet zoals in het voorbeeld dus.Code:register int i; for (i = 0;i < 10;i++) { code; } for (i = 0;i < 10;i++) { code; } ...no votes
-
28-03-2005, 14:44 #21Member
- Registered
- 30/09/02
- Location
- Mariakerke
- Posts
- 554
- iTrader
- 1 (100%)
- Mentioned
- 0 Post(s)
- Reputation
- 2/2
Kheb me ooit eens laten wijsmaken dat het gebruik van het keyword register af te raden is. Het is beter de compiler te laten beslissen wat in het register moet en wat niet.
En met die code die hier staat, is uw i wel globaal gedeclareerd, waardoor ge die gans de rest van uw programma meesleept, terwijl em enkel moet gekend zijn in de lussen. (en ge offert er hier nog es een register plaats voor op ook, dus ik betwijfel of dit een goede oplossing is)no votes
-
28-03-2005, 15:28 #22
In een standaard C++ compiler zitten die twee niet in dezelfde scope, en is de eerste i niet meer bereikbaar nadat de loop gedaan is. In bepaalde C++ compilers die de standaard op dit punt niet volgen (vooral bepaalde MSVC versies, je kan sommige versies wel met een commandline optie correct laten werken, maar MFC eist de incorrecte werking) blijft de i wel in scope na het einde van de loop.
Voor de standaard maakt register niet veel uit. Storage class register is bijna equivalent met auto, met het verschil dat je van een variabele met storage class register het adres niet kan nemen. Voor de rest mag een compiler van de standaard (C99, ik heb de C++ standaard hier niet liggen) "register" negeren. Vele compilers zullen het wel als een hint beschouwen dat je snel toegang tot dat ding wil, maar er is geen enkele garantie dat die variabele ook echt z'n eigen register krijgt. En inderdaad, in eerste instantie is het beter dit niet te gebruiken, later kan je nog altijd wat proberen als het te traag gaat.
Niet dat het veel zal uitmaken, want als die variabele echt veel gebruikt wordt zal de compiler waarschijnlijk zelf al het initiatief nemen om er vooral een register voor te gebruiken.Last edited by wlibaers; 28-03-2005 at 15:29.
"If you have a right to respect, that means other people don't have a right to their own opinions."
Thomas Sowellno votes
