/ 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
#define streng array
Fra : Jesper Gødvad


Dato : 24-05-01 14:22

Hej Alle.

Nu har jeg et nyt problem

Jeg har defineret nogle fejl-konstanter i mit server-program, der ser sådan
ud:

#define LEXER_FEJL 100
#define ULOVLIGT_TEGN 1

#define PARSER_FEJL 200
#define UKENDT_KOMMANDO 1
#define EN_ANDEN_FEJL 2

Hvis lexeren møder et ulovligt tegn bliver fejlnummeret LEXER_FEJL +
ULOVLIGT_TEGN = 101

I mit klient-program bruger jeg også fejlnumrene, men vil gerne tilføje en
fejlbeskrivelse så brugeren ikke skal slå op i en manual. Fx.

#define LEXER_FEJL_TEKST "Lexikalsk fejl"
#define ULOVLIGT_TEGN_TEKST "det er forbudt at skrive: "
osv...

På nuværende tidspunkt er den eneste løsning jeg kan se noget i stil med:

std::string fejlbeskrivelse( int fejlnr ) {
string besked;
if ( fejlnr > 200 ) {
besked = PARSER_FEJL_TEKST;
fejlnr -= 200;
switch ( fejlnr ) {
case ULOVLIGT_TEGN : besked += ULOVLIGT_TEGN_TEKST
// osv...
}
}
if ( fejlnr > 100 ) {
// ja, I kan jo gætte resten.

-----

Er der ikke en nemmere løsning i stil med:

#define FEJL_BESKED[ LEXER_FEJL + ULOVLIGT_TEGN ] "bla bla."

Så jeg har en direkte adgang til beskrivelserne ligesom i et array?

En løsning hvor beskrivelserne ligger i en fil er ikke gangbar.

mvh. jesper






 
 
Michael Rasmussen (24-05-2001)
Kommentar
Fra : Michael Rasmussen


Dato : 24-05-01 17:12

Jesper Gødvad" <Xesper@goedvad.dk> wrote in message
news:9ej1mj$c4q$1@sunsite.dk...
> Hej Alle.

Hej Jesper

> Nu har jeg et nyt problem

[klipkilp]

jeg ville nok vælge nogen smartere fejlkoder som er på 2^n formen:
ex. 1, 2, 4, 8, 16, 32 ... osv.
og så have

enum Fejl { FEJL_1 = 1, FEJL_2 = 2, FEJL_3 = 4 };
char FejlStreng[MAX_FEJL][50] = { "fejl1", "fejl2", "fejl3" }; // osv.

std::string fejlbeskrivelse( int fejlnr ) {
string besked;

for(int i=0; i<MAX_FEJL; i++){
if( fejlnr & (1<<i) )
besked += FejlStreng[i]; // eller hvordan du nu vil have det
}

return besked;
}

eller noget i den stil.

Venlig hilsen
Michael Rasmussen




Jesper Gødvad (26-05-2001)
Kommentar
Fra : Jesper Gødvad


Dato : 26-05-01 08:07


Hej Michael

> [klipkilp]
>
> jeg ville nok vælge nogen smartere fejlkoder som er på 2^n formen:
> ex. 1, 2, 4, 8, 16, 32 ... osv.
> og så have

mmmjaa, men jeg kommer op på 25+ forskellige fejlmeddelelser, så det bliver
nogle ret store tal. Desuden mister jeg muligheden for at lave fejl under
100 til hardware fejl, 1xx lexer fejl og 2xx parserfejl etc med mindre jeg
laver endnu en oversættelses tabel.

> enum Fejl { FEJL_1 = 1, FEJL_2 = 2, FEJL_3 = 4 };
> char FejlStreng[MAX_FEJL][50] = { "fejl1", "fejl2", "fejl3" }; // osv.
>
> std::string fejlbeskrivelse( int fejlnr ) {
> string besked;
>
> for(int i=0; i<MAX_FEJL; i++){
> if( fejlnr & (1<<i) )

Hvad checker if for i ovenstående?

> besked += FejlStreng[i]; // eller hvordan du nu vil have det
> }
>
> return besked;

Mvh. jesper



Michael Rasmussen (27-05-2001)
Kommentar
Fra : Michael Rasmussen


Dato : 27-05-01 13:00

"Jesper Gødvad" <Xesper@goedvad.dk> wrote in message
news:9enkg6$ka2$1@sunsite.dk...
> mmmjaa, men jeg kommer op på 25+ forskellige fejlmeddelelser, så det
bliver
> nogle ret store tal. Desuden mister jeg muligheden for at lave fejl under
> 100 til hardware fejl, 1xx lexer fejl og 2xx parserfejl etc med mindre jeg
> laver endnu en oversættelses tabel.

fejlkodernes nr. er ligegyldige? Og hvis du insisterer på at have
1xx/2xx/3xx til
at betyde noget bestemt kan du ikke repræssentere mere end en fejl ad gangen
pr. fejlkode, hvis du i stedet lader hver bit i fejlkoden være en fejl kan
du have
mange flere fejl samtidig med en fejlkode ex. fejl 1, fejl 3 og fejl 14
ville give en
fejlkode: (1<<1)+(1<<3)+(1<<14) = 1h + 8h + 4000h = 4009h = 16393. Hvis
du bruger en 32-bit integer kan du altså repræsentere 32 samtidige fejl hvor
du,
med 1xx måden kun kan have en af gangen.

> > for(int i=0; i<MAX_FEJL; i++){
> > if( fejlnr & (1<<i) )
>
> Hvad checker if for i ovenstående?

om bit 'i' er sat.

venlig hilsen
Michael Rasmussen




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

Månedens bedste
Årets bedste
Sidste års bedste