abonnement Unibet Coolblue Bitvavo
pi_110385500
quote:
7s.gif Op maandag 16 april 2012 02:24 schreef Dale. het volgende:
Vraagje... heb zelf niet C / C++ op m'n computer atm dus weet niet hoe het compileert...

Maaar hoe gaat C en C++ (eventueel C++11) om met
- a[-1] met negatieve constante index dus? (retouneert het een error bij het compileren? ofzo)
- a[i] met i een negatieve integer?
Dat kan gewoon. a[i] is in principe syntactic sugar voor *(a + i).
  maandag 16 april 2012 @ 12:00:28 #27
314941 Ai_KaRaMBa
Eat my shorts!
pi_110389889
Negatieve array index is inderdaad geen probleem (en hoewel wat tricky, soms zelfs handig!)

Sterker nog, doordat het (zoals thabit al zij) gewoon syntactic suger voor rekenen met pointers is, is zelfs -1[a] geldige C syntax :)
  maandag 16 april 2012 @ 12:33:51 #28
189216 netolk
maar dan andersom
pi_110390944
quote:
7s.gif Op maandag 16 april 2012 02:24 schreef Dale. het volgende:
Vraagje... heb zelf niet C / C++ op m'n computer atm dus weet niet hoe het compileert...

Maaar hoe gaat C en C++ (eventueel C++11) om met
- a[-1] met negatieve constante index dus? (retouneert het een error bij het compileren? ofzo)
- a[i] met i een negatieve integer?
bij mij is a[-1] het zelfde als het laatste element van a
Beware of the Raping Zebra's
  maandag 16 april 2012 @ 12:55:11 #29
314941 Ai_KaRaMBa
Eat my shorts!
pi_110391583
Uhm, nee? lijkt me dat a[-1] het element voor a[0] terug geeft?

Mogelijk als a niet een array van een primitief type is en het datatype de [] heeft geimplementeerd, dan zou het misschien wel kunnen dat a[-1] iets anders doet, maar in "normaal" C geeft a[-1] niet het laatste element!
  maandag 16 april 2012 @ 13:02:17 #30
189216 netolk
maar dan andersom
pi_110391821
quote:
15s.gif Op maandag 16 april 2012 12:55 schreef Ai_KaRaMBa het volgende:
Uhm, nee? lijkt me dat a[-1] het element voor a[0] terug geeft?

Mogelijk als a niet een array van een primitief type is en het datatype de [] heeft geimplementeerd, dan zou het misschien wel kunnen dat a[-1] iets anders doet, maar in "normaal" C geeft a[-1] niet het laatste element!
nope bij bij doet (of deed in mn oude compiler) int a[10], dan is a[-1] = a[9]

EDIT: idd even met mn "nieuwe" compiler gecheckt en nu is: a[-1] != a[9] evenals a[10] != a[0] wat bij mijn oude compiler dus ook het geval was

[ Bericht 9% gewijzigd door netolk op 16-04-2012 13:08:41 ]
Beware of the Raping Zebra's
  maandag 16 april 2012 @ 13:09:40 #31
314941 Ai_KaRaMBa
Eat my shorts!
pi_110392077
Serieus??? Welke compiler?

En iets als dit dan?

1
2
3
4
int a[10] = {0};
int *b = &a[1];
b[-1] = 0xCAFE;
printf("%X %X", a[0], a[9]);

Edit: uit jouw edit lijkt het alsof de compiler bij bekende array-grootte een extra modulo operatie invoegt? Dat lijkt mij zeer onwenselijk eigenlijk!!
  maandag 16 april 2012 @ 13:14:43 #32
189216 netolk
maar dan andersom
pi_110392310
MinGW versie 3.x volgens mij maar die versie weet ik niet zeker nu heb ik 5.x en die doet dat idd niet
Beware of the Raping Zebra's
pi_110398543
Een goede C++ compiler zou niet mogen doen wat netolk beschrijft. De standaard beschrijft precies wat er gebeurt bij array-indexering:
quote:
8.3.4.6:
Except where it has been declared for a class (13.5.5), the subscript operator [] is interpreted in such a way that E1[E2] is identical to *((E1)+(E2)).
Dus, zoals al is gezegd, is a[i] gelijk aan *(a + i) en hier mag de compiler niets aan veranderen. Met een negatieve i zou dit vrijwel altijd betekenen dat je uit je array loopt, wat resulteert in ongedefinieerd gedrag en dus gevaarlijk is. Als je echter midden in een array zit, kan een negatieve index geldig zijn.

Zoals ook al gezegd is, geldt dit natuurlijk alleen voor array-types. Als het een klasse betreft met een overloaded operator[](), gaan andere regels op.

Als laatste opmerking, sommige implementaties slaan de grootte van een dynamisch gealloceerde array op in positie array[-1]. (De grootte van een dynamisch gealloceerde array moet immers ergens opgeslagen worden, zodat delete[] weet hoeveel waardes verwijderd moeten worden.) Dus het zou kunnen zijn dat:

1
2
3
4
5
int const size = 42;
int *arr = new int[size];
if (arr[-1] == size) {
   // Compiler slaat array-grootte voor array op
}

Nogmaals, dit voorbeeld is dus geen goede C++ code omdat het gedrag per compiler kan (en zal) verschillen. Het programma kan zelfs prima crashen, als het toevallig uit verboden geheugen leest.
"Slechts diegene mag slopen die iets beters kan bouwen."
  donderdag 7 juni 2012 @ 17:21:30 #34
189216 netolk
maar dan andersom
pi_112574211
zou iemand mij kunnen helpen met threads in c++?
ik gebruik de mingw compiler (weet eerlijk gezegd niet welke versie dacht 5.x oid)

Ik heb een thread nodig om toets aanslagen af te kunnen vangen (onder windows) vroeger kon ik met deze code volstaan:
SPOILER
Om spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
maar nu werkt dit niet meer onder de compiler die ik nu dus gebruik (schijnt oud te zijn oid) ik weet dat threads tegenwoordig door C++ ondersteund worden en ik dus geen specifieke Windows code meer nodig heb, maar is het dan ook mogelijk om toets (en muis) aanslagen te registreren buiten Windows om?

dan heb ik nog een vraag: Zelfs met de optie: -std=c++0x kan ik de volgende code niet compileren omdat thread geen member van std zou zijn:
1
2
3
4
5
6
7
8
#include <thread>

int main(){
    
    std::thread mythread;
    
    return 0;
}
Beware of the Raping Zebra's
  donderdag 7 juni 2012 @ 17:47:58 #35
314941 Ai_KaRaMBa
Eat my shorts!
pi_112575334
Als je een windows applicatie bouwt, ben je sowieso aan de windows API gebonden. Die CreateThread functie zit daar (nog steeds) in, dus ik zou niet weten waarom je oude code het niet meer zou doen? Link je wel goed? Include je windows.h wel?

En die threads functionaliteit zit pas sinds kort in de nieuwste C++ specificatie; mogelijk ondersteund je compiler ze nog niet?

Het hele user interface gebeuren (oa muis en toetsenbord aanslagen) zijn platform specifiek en daarvoor zit je nog steeds aan een GUI toolkit vast. Dat kan gewoon de Win32 API zijn. Als je het platform onafhankelijk wil doen, kun je ook kijken naar Qt, wxWidgets of OpenGL/GLUT.
  donderdag 7 juni 2012 @ 22:05:37 #36
189216 netolk
maar dan andersom
pi_112587270
quote:
0s.gif Op donderdag 7 juni 2012 17:47 schreef Ai_KaRaMBa het volgende:
Als je een windows applicatie bouwt, ben je sowieso aan de windows API gebonden. Die CreateThread functie zit daar (nog steeds) in, dus ik zou niet weten waarom je oude code het niet meer zou doen? Link je wel goed? Include je windows.h wel?

En die threads functionaliteit zit pas sinds kort in de nieuwste C++ specificatie; mogelijk ondersteund je compiler ze nog niet?

Het hele user interface gebeuren (oa muis en toetsenbord aanslagen) zijn platform specifiek en daarvoor zit je nog steeds aan een GUI toolkit vast. Dat kan gewoon de Win32 API zijn. Als je het platform onafhankelijk wil doen, kun je ook kijken naar Qt, wxWidgets of OpenGL/GLUT.
ik krijg de volgend foutmelding als ik de eerder geplaatste code probeer te compileren:
1
2
error: ambiguates old declaration 'long unsigned int Threader_Key(vo
id*)'

ook lijkt het me logisch dat de compiler thread zou moeten ondersteunen aangezien het meegeleverd is.
het probleem is dus dat de vorige versie van de compiler deze code prima compileerde en dat ik nu dus zowel de "oude" (via Win32 API) als de "nieuwe" thread niet kan gebruiken
Beware of the Raping Zebra's
  donderdag 7 juni 2012 @ 22:26:15 #37
314941 Ai_KaRaMBa
Eat my shorts!
pi_112588642
Komt dat niet omdat je je functie Threader_Key binnen je Key klasse anders declareert, dan bij het implementeren van de functie?

(hint: je implementeert het met een WINAPI calling convention, terwijl je 'm daar niet mee declareert)

En voor wat betreft de C++11 threads, gaf google me: http://stackoverflow.com/(...)cy-features-in-mingw

[ Bericht 21% gewijzigd door Ai_KaRaMBa op 07-06-2012 22:57:36 ]
  vrijdag 8 juni 2012 @ 01:07:12 #38
189216 netolk
maar dan andersom
pi_112596786
quote:
0s.gif Op donderdag 7 juni 2012 22:26 schreef Ai_KaRaMBa het volgende:
Komt dat niet omdat je je functie Threader_Key binnen je Key klasse anders declareert, dan bij het implementeren van de functie?

(hint: je implementeert het met een WINAPI calling convention, terwijl je 'm daar niet mee declareert)

En voor wat betreft de C++11 threads, gaf google me: http://stackoverflow.com/(...)cy-features-in-mingw
Ja, dat weet ik idd maar de vorige compiler gaf dus problemen als WINAPI in een class stond en werkte deze code. Heb net voor de zekerheid nog even gecheckt maar krijg deze melding:
1error: 'WINAPI' is neither function nor member function; cannot be declared friend

Update:
Ik heb de fout gevonden. Uiteindelijk was het even puzzelen maar het kwam er op neer dat de compiler WINAPI niet accepteerde omdat er blijkbaar ergens een #include<windows.h> weg gevallen was. Dus eigenlijk een stomme fout 8)7

in ieder geval bedankt voor de hulp en het meedenken

[ Bericht 12% gewijzigd door netolk op 08-06-2012 01:30:10 ]
Beware of the Raping Zebra's
pi_112839298
Ik heb een probleem; ik heb een tentamen van vorig jaar bekeken over programmeren in C#. Nu snap ik eigenlijk alle opdrachten alleen kom ik er uit 1 niet uit:



Ik hoef niet de volledige uitwerking, alleen maar even een opzetje hoe dit aangepakt zou moeten worden. Ik dacht zelf aan een for-loop of een while-loop maar kan er niet achter komen hoe je dan individueel al die karakters omzet naar een getal. Iemand enig idee? Alvast bedankt :P
pi_112841335
C# is een hele andere programmeertaal dan C of C++, dus ik weet niet of veel mensen hier ermee bekend zijn. Ik neem aan dat je het i-de karakter van string s gewoon kunt ophalen met s[i].
  woensdag 13 juni 2012 @ 16:33:12 #41
292596 Faux.
Fan van zichzelf
pi_112842847
Vraagje, ik wil wel weer 's een nieuwe programmeertaal leren, maar is C++ niet een beetje ouderwets? Kan ik dan niet beter een iets recentere taal leren?
Hier schreef tong80 het volgende:
Faux is een FOK!held, zoals dat vroeger Gellarboy en Brechtje waren. Users die je koestert.
  woensdag 13 juni 2012 @ 17:38:58 #42
189216 netolk
maar dan andersom
pi_112846008
quote:
11s.gif Op woensdag 13 juni 2012 16:33 schreef Faux. het volgende:
Vraagje, ik wil wel weer 's een nieuwe programmeertaal leren, maar is C++ niet een beetje ouderwets? Kan ik dan niet beter een iets recentere taal leren?
nee, C++ is niet ouderwets heel veel word nog steeds in C++ geschreven in veel games zijn de belangrijke delen geschreven in C++, ook word C++ vaak voor modellen gebruikt
Beware of the Raping Zebra's
pi_112847861
quote:
11s.gif Op woensdag 13 juni 2012 16:33 schreef Faux. het volgende:
Vraagje, ik wil wel weer 's een nieuwe programmeertaal leren, maar is C++ niet een beetje ouderwets? Kan ik dan niet beter een iets recentere taal leren?
C++ is een hele goede taal om te leren programmeren, maar zodra je het eenmaal kunt raad ik je aan naar andere talen over te stappen.
  woensdag 13 juni 2012 @ 19:10:41 #44
292596 Faux.
Fan van zichzelf
pi_112849962
quote:
7s.gif Op woensdag 13 juni 2012 18:27 schreef thabit het volgende:

[..]

C++ is een hele goede taal om te leren programmeren, maar zodra je het eenmaal kunt raad ik je aan naar andere talen over te stappen.
Ik kan al programmeren, maar ben wel geïnteresseerd in hoe computers vanbinnen werken en zo.
Hier schreef tong80 het volgende:
Faux is een FOK!held, zoals dat vroeger Gellarboy en Brechtje waren. Users die je koestert.
pi_112851229
quote:
0s.gif Op woensdag 13 juni 2012 15:33 schreef -tape- het volgende:
Ik heb een probleem; ik heb een tentamen van vorig jaar bekeken over programmeren in C#. Nu snap ik eigenlijk alle opdrachten alleen kom ik er uit 1 niet uit:

[ afbeelding ]

Ik hoef niet de volledige uitwerking, alleen maar even een opzetje hoe dit aangepakt zou moeten worden. Ik dacht zelf aan een for-loop of een while-loop maar kan er niet achter komen hoe je dan individueel al die karakters omzet naar een getal. Iemand enig idee? Alvast bedankt :P
Als ik je goed begrijp, dan staat je antwoord al in de opgave. Je vraagt hoe een karakter 'x' om te zetten naar getal n, toch? We nemen aan dat je op een of andere manier de karakters individueel aan kunt spreken. Nu moet je 'a' omzetten naar 1, 'b' naar 2 enzovoorts.

In de opgave staat dat je 'a' om kunt zetten naar het getal 97. Karakter 'b' kan je op dezelfde manier omzetten naar 98. Deze getallen zou je kunnen gebruiken om de karakters om te rekenen naar hun getal-code. Er zijn andere manieren (een groot switch-statement, bijvoorbeeld), maar deze aanpak ligt voor de hand.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_112851576
quote:
11s.gif Op woensdag 13 juni 2012 16:33 schreef Faux. het volgende:
Vraagje, ik wil wel weer 's een nieuwe programmeertaal leren, maar is C++ niet een beetje ouderwets? Kan ik dan niet beter een iets recentere taal leren?
Ik ben wel nieuwsgierig - waarom denk je dat C++ ouderwets is?

Een antwoord op je vraag is natuurlijk niet te geven. Het klinkt alsof je het voor de lol doet. In dat geval maakt het natuurlijk niet uit hoe nuttig de programmeertaal is en zou ik zeggen: kies wat je leuk lijkt.
"Slechts diegene mag slopen die iets beters kan bouwen."
pi_112856815
quote:
7s.gif Op woensdag 13 juni 2012 19:10 schreef Faux. het volgende:

[..]

Ik kan al programmeren, maar ben wel geïnteresseerd in hoe computers vanbinnen werken en zo.
In dat opzicht kan C++ handig zijn. Het dwingt je om te 'denken' als de computer/compiler.
  donderdag 14 juni 2012 @ 00:10:42 #48
189216 netolk
maar dan andersom
pi_112870136
quote:
0s.gif Op woensdag 13 juni 2012 21:05 schreef thabit het volgende:

[..]

In dat opzicht kan C++ handig zijn. Het dwingt je om te 'denken' als de computer/compiler.
ahh, ik wist het!

AI bestaat al lang :P
Beware of the Raping Zebra's
  donderdag 14 juni 2012 @ 08:16:12 #49
292596 Faux.
Fan van zichzelf
pi_112874408
quote:
0s.gif Op woensdag 13 juni 2012 19:39 schreef GS42 het volgende:

[..]

Ik ben wel nieuwsgierig - waarom denk je dat C++ ouderwets is?

Een antwoord op je vraag is natuurlijk niet te geven. Het klinkt alsof je het voor de lol doet. In dat geval maakt het natuurlijk niet uit hoe nuttig de programmeertaal is en zou ik zeggen: kies wat je leuk lijkt.
Programmeren doe ik inderdaad voor de lol. Het is natuurlijk wel handig om er uiteindelijk een mooi programma mee te kunnen schrijven, maar het is niet zo dat ik persé de beste programmeertaal wil leren.

quote:
0s.gif Op woensdag 13 juni 2012 21:05 schreef thabit het volgende:

[..]

In dat opzicht kan C++ handig zijn. Het dwingt je om te 'denken' als de computer/compiler.
Dat lijkt me leuk. Ik ga het proberen, dank jullie :)
Hier schreef tong80 het volgende:
Faux is een FOK!held, zoals dat vroeger Gellarboy en Brechtje waren. Users die je koestert.
  donderdag 14 juni 2012 @ 10:07:34 #50
85514 ralfie
!Yvan eht nioj
pi_112876504
quote:
0s.gif Op woensdag 13 juni 2012 15:33 schreef -tape- het volgende:
Ik heb een probleem; ik heb een tentamen van vorig jaar bekeken over programmeren in C#. Nu snap ik eigenlijk alle opdrachten alleen kom ik er uit 1 niet uit:

[ afbeelding ]

Ik hoef niet de volledige uitwerking, alleen maar even een opzetje hoe dit aangepakt zou moeten worden. Ik dacht zelf aan een for-loop of een while-loop maar kan er niet achter komen hoe je dan individueel al die karakters omzet naar een getal. Iemand enig idee? Alvast bedankt :P
1
2
3
4
string outp = string.empty;
foreach( char c in string.ToLower())
   outp+='-' + (((int)c - 'a')+1).ToString();
return outp.Substring(1);
Vergeleken met c++ is C# zoo makkelijk.
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')