🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #12281

Re: C/C++ probleem

#12281
From: Roel Schroeven
Date: Wed, 05 Dec 2001 21:10
87 lines
3824 bytes
On Wed, 05 Dec 2001 21:16:53 +0100, -P!- wrote:

> hallo,
> kan iemand mij vertellen wat er mis is met deze code, ben niet echt
> ervaren met C/C++:

Ik doe mijn best. Kijk onderaan

> #include <string>
> 
> using namespace std;
> 
> void main() {
> 	double dat[29];
> 	double res;
> 	int loop;
> 	res = 0;
> 
> 	dat[0] = 56453578;
[knip>
> 	dat[28] = 54356;
> 	dat[29] = 789552;
> 
> 	for(loop = 0; loop < 30; loop++) {
>         res += (dat[loop] ? (dat[loop] - 50) : 69) ? dat[loop] : 69;
>         while (res > 300000) {
>             res -= dat[loop] ? dat[loop] : 169;
> 	    }
> 	}
> 	cout >> res;
> }
> 
> als ik het probeer te compileren geeft hij de error "fatal error C1189:
> #error :  "eh.h is only for C++!""
> Ik gebruik de C compiler van Visual Studio.

Kan het zijn dat de file waar dit alles insteekt de extensie .c heeft ipv
.cpp? Dan probeert Visual Studio die namelijk te compileren in C-modus
ipv C++, en dat is niet goed want je gebruikt dingen uit de C++ library.

Dat zou het compilatie-probleem al moeten oplossen, maar ik als ik je
code zo eens bekijk heb ik nog wat andere opmerkingen:

- je declareert dat als een array met 29 (double dat[29]), maar je steekt
er 30 in (van 0 tot en met 29). Als je er 30 wil insteken, moet je zo
declareren: double dat[30].

- Je kan dat beter zo declareren en ineens initialiseren:

double dat[] =
{
  56453578, 6543209, // enz. enz.
};

Als je het zo doet, moet je zelfs geen grootte opgeven: dat wordt
automatisch geregeld. Als het niet de bedoeling is de inhoud te
veranderen, zet je er best nog 'const' voor.

- het is een slechte gewoonte 'magic numbers' in je code te gebruiken,
zoals hier bijv. voor de grootte van de array. Beter is werken met
constanten, bijv.
const datsize = 30;
double dat[30];
...
for (int i = 0; i < datsize; i++)
  ...

Of, als je dat declareert en initialiseert zoals hierboven, kan je sizeof
gebruiken:

for (int i = 0; i < sizeof(dat)/sizeof(dat[0]); i++)
  ...

Niet wakker liggen van de performantie daarvan, dat wordt al tijdens
compile-time allemaal berekend en is dus exact even snel.

Ook je andere magic numbers kan je beter vervangen door constanten. Dat
heeft verschillende voordelen: als je later andere waarden zou willen
gebruiken, moet je het slechts op een plaats veranderen. En, zeker zo
belangrijk, het is veel leesbaarder: als je goeie namen kiest voor je
constanten, weet iedereen die je code leest direct wat ze willen zeggen.

- Overdreven gebruik van ? : maakt de code ook nogal onleesbaar. Overweeg
gewoon met if ( ) te werken.

- cout >> res is fout, het is ofwel cout << res ofwel cin >> res. Ik
vermoed dat je het eerste bedoelt.
Technical Details
Message-ID: <pan.2001.12.05.22.10.03.824.9344@sneakemail.com>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!news.tele.dk!small.news.tele.dk!193.190.198.17!newsfeeds.belnet.be!news.belnet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
References: <Xns916ED91F272ADpi@195.130.132.65>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,8f785692f2cd0383
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2001-12-05 13:10:11 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!supernews.com!news.tele.dk!small.news.tele.dk!193.190.198.17!newsfeeds.belnet.be!news.belnet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
From: "Roel Schroeven" <x3jmyi0yrrn3h001@sneakemail.com>
Subject: Re: C/C++ probleem
Newsgroups: be.comp.programming
Message-ID: <pan.2001.12.05.22.10.03.824.9344@sneakemail.com>
References: <Xns916ED91F272ADpi@195.130.132.65>
User-Agent: Pan/0.10.0.93 (Unix)
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Comment-To: "-P!-" <pinocooreman@hotmail.com>
Lines: 87
Date: Wed, 05 Dec 2001 21:10:04 GMT
NNTP-Posting-Host: 213.224.75.62
X-Complaints-To: abuse@pandora.be
X-Trace: afrodite.telenet-ops.be 1007586604 213.224.75.62 (Wed, 05 Dec 2001 22:10:04 MET)
NNTP-Posting-Date: Wed, 05 Dec 2001 22:10:04 MET
Organization: Telenet Internet