/ 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
true == 1?
Fra : Bertel Lund Hansen


Dato : 25-05-02 11:03

Hej alle

Kan man stole på at true == 1?

I én af de lærebøger som jeg nu har anskaffet (Accelerated C++),
står der at true-1 reurnerer 0 eller -1.

Jeg ved ikke rigtig om jeg ville benytte mig af det hvis det
passede.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

 
 
Martin Moller Peders~ (25-05-2002)
Kommentar
Fra : Martin Moller Peders~


Dato : 25-05-02 11:24

In <14oueusf0oq86vpl2bofdp1k4uk3jskirh@sunsite.auc.dk> Bertel Lund Hansen <nospam@lundhansen.dk> writes:

>Hej alle

>Kan man stole på at true == 1?

ja. Der staar paa side 71 i bogen: "The C++ Programming Language" af
Bjarne Stroustrup.

Jeg havde forresten en dum fejl med booleans i C++, som compileren ikke
gav en warning paa.

Jeg havde en funktion:

bool a() {
int result;
// en masse kode, som bl.a. saetter result=3 //
return result;
}

a() returnede 1 istedet for 3, da jeg havde erklaeret funktionen til at
returner en bool ved en fejl.

Oev til GCC, som ikke gav en warning.

Mvh
Martin


David Rasmussen (25-05-2002)
Kommentar
Fra : David Rasmussen


Dato : 25-05-02 12:08

Martin Moller Pedersen wrote:
> In <14oueusf0oq86vpl2bofdp1k4uk3jskirh@sunsite.auc.dk> Bertel Lund Hansen <nospam@lundhansen.dk> writes:
>
>
> a() returnede 1 istedet for 3, da jeg havde erklaeret funktionen til at
> returner en bool ved en fejl.
>
> Oev til GCC, som ikke gav en warning.
>

Den kan jo ikke advare hver gang der sker et implicit cast.

/David


Martin Moller Peders~ (25-05-2002)
Kommentar
Fra : Martin Moller Peders~


Dato : 25-05-02 16:14

In <3CEF7096.5060704@yahoo.com> David Rasmussen <pinkfloydhomer@yahoo.com> writes:

>Martin Moller Pedersen wrote:
>> In <14oueusf0oq86vpl2bofdp1k4uk3jskirh@sunsite.auc.dk> Bertel Lund Hansen <nospam@lundhansen.dk> writes:
>>
>>
>> a() returnede 1 istedet for 3, da jeg havde erklaeret funktionen til at
>> returner en bool ved en fejl.
>>
>> Oev til GCC, som ikke gav en warning.
>>

>Den kan jo ikke advare hver gang der sker et implicit cast.

Saa oev til C++, for at den ikke have en rigtig boolean type modsat java,
hvor jeg helt sikkert ville have faaet en fejl.

Mvh
Martin



Bertel Lund Hansen (25-05-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 25-05-02 16:19

Martin Moller Pedersen skrev:

>Saa oev til C++, for at den ikke have en rigtig boolean type

Det er da ikke C++' type der er noget galt med. Det er det
fundamentale at man kan få lov at caste mellem typerne du brokker
dig over.

>modsat java, ...

Så brug da Java.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

David Rasmussen (25-05-2002)
Kommentar
Fra : David Rasmussen


Dato : 25-05-02 16:56

Bertel Lund Hansen wrote:
> Martin Moller Pedersen skrev:
>
>
>>Saa oev til C++, for at den ikke have en rigtig boolean type
>
>
> Det er da ikke C++' type der er noget galt med. Det er det
> fundamentale at man kan få lov at caste mellem typerne du brokker
> dig over.
>

Vel snarere at der sker automatiske casts mellem visse typer. Det er
faktisk irriterende at man som programmør ikke selv kan bestemme hvilke
casts der skal ske automatisk. Det er noget der er under overvejelse i
comp.std.c++.

/David


Martin Moller Peders~ (25-05-2002)
Kommentar
Fra : Martin Moller Peders~


Dato : 25-05-02 18:50

In <loaveug74j1od3t43ri5plt0dvm7js8kej@sunsite.auc.dk> Bertel Lund Hansen <nospam@lundhansen.dk> writes:

>Martin Moller Pedersen skrev:

>>Saa oev til C++, for at den ikke have en rigtig boolean type

>Det er da ikke C++' type der er noget galt med. Det er det
>fundamentale at man kan få lov at caste mellem typerne du brokker
>dig over.

Det er saa traels, at
bool a;
const int b=7;
a=b;
er lovligt og ikke giver en compiler-warning.

Hmm. Jeg maa heller lave min egen bool-class, som kun have vaerdierne
true og false. saa kan jeg lave et check paa "operator=" metoden, at der
kun tildeles 0 og 1.

Jeg kunne jo ogsaa programmere mere fejlfrit

Java er IMHO bedre lige i det her tilfaelde, men daarlige i saa mange andre,
saa jeg foretraekker alt i alt stadigvaek C++.

/Martin








David Rasmussen (25-05-2002)
Kommentar
Fra : David Rasmussen


Dato : 25-05-02 19:08

Martin Moller Pedersen wrote:
> In <loaveug74j1od3t43ri5plt0dvm7js8kej@sunsite.auc.dk> Bertel Lund Hansen <nospam@lundhansen.dk> writes:
>
>
>>Martin Moller Pedersen skrev:
>
>
>>>Saa oev til C++, for at den ikke have en rigtig boolean type
>>
>
>>Det er da ikke C++' type der er noget galt med. Det er det
>>fundamentale at man kan få lov at caste mellem typerne du brokker
>>dig over.
>
>
> Det er saa traels, at
> bool a;
> const int b=7;
> a=b;
> er lovligt og ikke giver en compiler-warning.
>

Det er med vilje at det er sådan. Men derfor kunne compileren godt vælge
at give en warning, især hvis man bad om strengeste warning-level.

/David


Martin Moller Peders~ (25-05-2002)
Kommentar
Fra : Martin Moller Peders~


Dato : 25-05-02 19:25

In <3CEFD31C.1090600@yahoo.com> David Rasmussen <pinkfloydhomer@yahoo.com> writes:

>Martin Moller Pedersen wrote:
>> In <loaveug74j1od3t43ri5plt0dvm7js8kej@sunsite.auc.dk> Bertel Lund Hansen <nospam@lundhansen.dk> writes:
>>
>>
>>>Martin Moller Pedersen skrev:
>>
>>
>>>>Saa oev til C++, for at den ikke have en rigtig boolean type
>>>
>>
>>>Det er da ikke C++' type der er noget galt med. Det er det
>>>fundamentale at man kan få lov at caste mellem typerne du brokker
>>>dig over.
>>
>>
>> Det er saa traels, at
>> bool a;
>> const int b=7;
>> a=b;
>> er lovligt og ikke giver en compiler-warning.
>>

>Det er med vilje at det er sådan. Men derfor kunne compileren godt vælge
>at give en warning, især hvis man bad om strengeste warning-level.

Jeg kompilerer altid mit eget kode med -Wall -Werror dvs. all warnings
slaaet til og alle warnings bliver betragtet som fejl og compiler skal stoppe
uden at genere kode. Det sammen med en masse assert's fanger de fleste af
mine dumme programmeringsfejl.

/Martin



Anders Melchiorsen (25-05-2002)
Kommentar
Fra : Anders Melchiorsen


Dato : 25-05-02 19:30

tusk@daimi.au.dk (Martin Moller Pedersen) skrev:

> [...] Jeg kompilerer altid mit eget kode med -Wall -Werror dvs. all
> warnings slaaet til [...]

-Wall (i gcc) slår faktisk ikke alle advarsler til, men kun dem som
advarer om adfærd der aldrig kan undskyldes.


Anders.

--
Min adresse er gyldig i en uge.
Derefter skal (kun) '.dJJJ-YY' delen fjernes.

David Rasmussen (25-05-2002)
Kommentar
Fra : David Rasmussen


Dato : 25-05-02 19:34

Anders Melchiorsen wrote:
> tusk@daimi.au.dk (Martin Moller Pedersen) skrev:
>
>
>>[...] Jeg kompilerer altid mit eget kode med -Wall -Werror dvs. all
>>warnings slaaet til [...]
>
>
> -Wall (i gcc) slår faktisk ikke alle advarsler til, men kun dem som
> advarer om adfærd der aldrig kan undskyldes.
>
>
> Anders.
>

Yep. -W er en god ide. Men den fanger du ikke den pågældende fejl. Men
det er gcc's "skyld".

/David


Bjarke Dahl Ebert (26-05-2002)
Kommentar
Fra : Bjarke Dahl Ebert


Dato : 26-05-02 10:10

"Martin Moller Pedersen" <tusk@daimi.au.dk> wrote:

> Det er saa traels, at
> bool a;
> const int b=7;
> a=b;
> er lovligt og ikke giver en compiler-warning.
>
> Hmm. Jeg maa heller lave min egen bool-class, som kun have vaerdierne
> true og false. saa kan jeg lave et check paa "operator=" metoden, at der
> kun tildeles 0 og 1.

Grunden til implicit konvertering mellem bool og int (begge veje) er
garanteret C-kodepraksis.
En C-programmør skriver jo rask væk "if (n)" i stedet for "if (n!=0)". Og
det er selvfølgelig fordi en "bool" i C *er* en int, så der er ingen grund
til at skelne mellem "n" og "n!=0".
Men efter min mening er det i C++ som regel meget klarere at skrive noget
inde i "if"-præmissen, der er et bool-udtryk i forvejen, uden at skulle
konverteres til et. Det kompilerer jo alligevel til det samme, så der er
ingen grund til at spare på tegnene hvis det mindsker læseligheden.

C++-programmører er desværre stadig vilde med den slags forkortet syntaks,
fx. "while(*p) *(p++) = 42;". Det man mener er selvfølgelig "while (*p!=0)
{ *p=42; p++; }". Det er som om man vægrer sig ved at skrive dette helt ud
når der findes obfuscated C-syntaks for det samme.


Nu vi er ved unødvendigt ubfuscated syntax: Hvorfor anbefales det egentlig i
C++ at man anvender 0 i stedet for NULL? Det er som om man ønsker sig
tilbage til en tid hvor et tal og en pointer var det samme (assembler). At
'Foo* f = 0;" ikke er tallet 0, men nul-pointeren (som fysisk kan have en
anden værdi end 0) gør jo ikke sagen bedre. Det ville da være meget bedre at
gå i den anden retning, og reservere et keyword (fx null) til nul-pointeren,
for at være mere type-eksplicit. Nul-pointeren har alligevel en fremtrædende
plads i C++-semantikken, så der er da intet forgjort i at "allokere" syntaks
til den.
En null-char har syntaksen '\0', en nul unsigned long har syntaksen 0UL, en
nul-double har syntaksen 0.0. Kun nul-pointeren må åbenbart ikke have sin
egen syntaks - den skrives '0', som nu er syntaks for både konstanten 0 af
typen 'int', såvel som nul-pointeren til en hvilken som helst type! Hvor
fedt er det når man skal kalde en funktion der er overloaded med "f(int)" og
"f(Foo*)"? Standarden specificerer utvivlsomt hvilken af dem der så bliver
kaldt (eller om kaldet er ambiguous), men ville "f(0)" og "f(null)" ikke
være klarere?

Desuden er "if (p==null)" da meget klarere end "if (!p)". Man er derved mere
eksplicit omkring intensionen, og det er jo altid godt.


Mvh. Bjarke







Thomas Krog (26-05-2002)
Kommentar
Fra : Thomas Krog


Dato : 26-05-02 11:08

> Nu vi er ved unødvendigt ubfuscated syntax: Hvorfor anbefales det egentlig
> i C++ at man anvender 0 i stedet for NULL?

Det gør det heller ikke i Effective c++ fra Scott Meyer

> Hvor
> fedt er det når man skal kalde en funktion der er overloaded med "f(int)"
og
> "f(Foo*)"? Standarden specificerer utvivlsomt hvilken af dem der så bliver
> kaldt (eller om kaldet er ambiguous), men ville "f(0)" og "f(null)" ikke
> være klarere?

jo og Scott Meyer giver også en løsning (eneste ulempe er at den stadig ikke
forhindrer brugerer i skrive f(0) i stedet for f(null) - men den er god til
eget brug):
const // this is a const object...
class {
public:
template<class T> // convertible to any type
operator T*() const // of null non-member
{ return 0; } // pointer...
template<class C, class T> // or any type of null
operator T C::*() const // member pointer...
{ return 0; }
private:
void operator&() const; // whose address can't be
// taken (see Item 27)...
} NULL; // and whose name is NULL






Byrial Jensen (26-05-2002)
Kommentar
Fra : Byrial Jensen


Dato : 26-05-02 12:41

Bjarke Dahl Ebert <bebert@worldonline.dk> skrev:
> Grunden til implicit konvertering mellem bool og int (begge veje) er
> garanteret C-kodepraksis.

Nej, det kan C++ ikke have arvet fra C, for typen bool er ældre i
C++ end i C.

> En C-programmør skriver jo rask væk "if (n)" i stedet for "if (n!=0)".

Ja, for hvis n er en int, har de 2 udtryk samme type!

> Og
> det er selvfølgelig fordi en "bool" i C *er* en int, så der er ingen grund
> til at skelne mellem "n" og "n!=0".

Nej, en bool i C er ikke en int. Det er en heltalstype som kun kan
have værdierne 0 og 1. En int's værdiområde skal være meget større
end det.

Bjarke Dahl Ebert (26-05-2002)
Kommentar
Fra : Bjarke Dahl Ebert


Dato : 26-05-02 14:08

"Byrial Jensen" <bjensen@nospam.dk> wrote:
> Bjarke Dahl Ebert <bebert@worldonline.dk> skrev:
> > Grunden til implicit konvertering mellem bool og int (begge veje) er
> > garanteret C-kodepraksis.
>
> Nej, det kan C++ ikke have arvet fra C, for typen bool er ældre i
> C++ end i C.

Prøv at læse hvad jeg skriver .
C-kodepraksis er at skrive "if (expr)" og "while (expr)" hvor <expr> er et
heltalsudtryk.

Da C++ nu tager tager et bool-udtryk i sådanne (og andre) statements, er C++
nødt til at have implicit konvertering fra int til bool, for ikke at
ødelægge alle de millioner af linier kode der siger "if (a[i])". Ligeledes,
da en en del kode "antager" at et bool-udtryk evaluerer til enten 0 eller 1
(fx count[c=='x']++;), er C++ nødt til også at have implicit konvertering
fra bool til int.


>
> > En C-programmør skriver jo rask væk "if (n)" i stedet for "if (n!=0)".
>
> Ja, for hvis n er en int, har de 2 udtryk samme type!

Da ikke i C++. Typen af 'n' er 'int', og typen af 'n!=0' er en 'bool'.
I C har du ret: 'n' og 'n!=0' samme type (nemlig int), men det modsiger du
nedenfor:

> > Og
> > det er selvfølgelig fordi en "bool" i C *er* en int, så der er ingen
grund
> > til at skelne mellem "n" og "n!=0".
> Nej, en bool i C er ikke en int. Det er en heltalstype som kun kan
> have værdierne 0 og 1. En int's værdiområde skal være meget større
> end det.

Det kender jeg ikke noget til... Det må være C99(?).
Da jeg skrev "C" mente jeg "ANSI C" (pre-C99).

Mvh. Bjarke





Byrial Jensen (26-05-2002)
Kommentar
Fra : Byrial Jensen


Dato : 26-05-02 19:28

Bjarke Dahl Ebert <bebert@worldonline.dk> skrev:
> "Byrial Jensen" <bjensen@nospam.dk> wrote:
>> Bjarke Dahl Ebert <bebert@worldonline.dk> skrev:
>>
>> > En C-programmør skriver jo rask væk "if (n)" i stedet for "if (n!=0)".
>>
>> Ja, for hvis n er en int, har de 2 udtryk samme type!
>
> Da ikke i C++.

En C-programmør skriver per definition C-programmer, ikke
C++-programmer.

> Typen af 'n' er 'int', og typen af 'n!=0' er en 'bool'.
> I C har du ret: 'n' og 'n!=0' samme type (nemlig int), men det
> modsiger du nedenfor:

Nej, det modsiger jeg ikke nedenfor. Udtryk med relationelle og
logiske operatorer har ikke typen bool i C, men typen int.

>> > Og
>> > det er selvfølgelig fordi en "bool" i C *er* en int, så der er ingen grund
>> > til at skelne mellem "n" og "n!=0".
>> Nej, en bool i C er ikke en int. Det er en heltalstype som kun kan
>> have værdierne 0 og 1. En int's værdiområde skal være meget større
>> end det.
>
> Det kender jeg ikke noget til... Det må være C99(?).
> Da jeg skrev "C" mente jeg "ANSI C" (pre-C99).

Ja, det gælder C99. ANSI C har ikke nogen bool type.

Når man siger C uden nærmere angivelse, må man gå ud fra at der menes
C som i den aktuelt gældende internationale C-standard, ikke som i en
nu forældet og udgået C-standard.

David Rasmussen (26-05-2002)
Kommentar
Fra : David Rasmussen


Dato : 26-05-02 14:16

Bjarke Dahl Ebert wrote:
> "Martin Moller Pedersen" <tusk@daimi.au.dk> wrote:
>
>
>>Det er saa traels, at
>>bool a;
>>const int b=7;
>>a=b;
>>er lovligt og ikke giver en compiler-warning.
>>
>>Hmm. Jeg maa heller lave min egen bool-class, som kun have vaerdierne
>>true og false. saa kan jeg lave et check paa "operator=" metoden, at der
>>kun tildeles 0 og 1.
>
>
> Grunden til implicit konvertering mellem bool og int (begge veje) er
> garanteret C-kodepraksis.
> En C-programmør skriver jo rask væk "if (n)" i stedet for "if (n!=0)". Og
> det er selvfølgelig fordi en "bool" i C *er* en int, så der er ingen grund
> til at skelne mellem "n" og "n!=0".
> Men efter min mening er det i C++ som regel meget klarere at skrive noget
> inde i "if"-præmissen, der er et bool-udtryk i forvejen, uden at skulle
> konverteres til et. Det kompilerer jo alligevel til det samme, så der er
> ingen grund til at spare på tegnene hvis det mindsker læseligheden.
>

Enig.

> C++-programmører er desværre stadig vilde med den slags forkortet syntaks,
> fx. "while(*p) *(p++) = 42;". Det man mener er selvfølgelig "while (*p!=0)
> { *p=42; p++; }". Det er som om man vægrer sig ved at skrive dette helt ud
> når der findes obfuscated C-syntaks for det samme.
>

Enig.

>
> Nu vi er ved unødvendigt ubfuscated syntax: Hvorfor anbefales det egentlig i
> C++ at man anvender 0 i stedet for NULL?

Det gør "man" heller ikke. Nogen gør, og det er ud fra den underlige
filosofi at folk skal kunne gætte hvad det betyder hvis de ser det i
andet kode. Mange anbefaler at man bruger NULL.

> Det er som om man ønsker sig
> tilbage til en tid hvor et tal og en pointer var det samme (assembler). At
> 'Foo* f = 0;" ikke er tallet 0, men nul-pointeren (som fysisk kan have en
> anden værdi end 0) gør jo ikke sagen bedre. Det ville da være meget bedre at
> gå i den anden retning, og reservere et keyword (fx null) til nul-pointeren,

Enig.

> for at være mere type-eksplicit. Nul-pointeren har alligevel en fremtrædende
> plads i C++-semantikken, så der er da intet forgjort i at "allokere" syntaks
> til den.
> En null-char har syntaksen '\0', en nul unsigned long har syntaksen 0UL, en
> nul-double har syntaksen 0.0. Kun nul-pointeren må åbenbart ikke have sin
> egen syntaks - den skrives '0', som nu er syntaks for både konstanten 0 af
> typen 'int', såvel som nul-pointeren til en hvilken som helst type! Hvor
> fedt er det når man skal kalde en funktion der er overloaded med "f(int)" og
> "f(Foo*)"? Standarden specificerer utvivlsomt hvilken af dem der så bliver
> kaldt (eller om kaldet er ambiguous), men ville "f(0)" og "f(null)" ikke
> være klarere?
>

Jo.

> Desuden er "if (p==null)" da meget klarere end "if (!p)". Man er derved mere
> eksplicit omkring intensionen, og det er jo altid godt.
>

Enig.

/David


Mogens Hansen (26-05-2002)
Kommentar
Fra : Mogens Hansen


Dato : 26-05-02 21:36


"David Rasmussen" <pinkfloydhomer@yahoo.com> wrote
> Bjarke Dahl Ebert wrote:

[snip]
> >
> > Nu vi er ved unødvendigt ubfuscated syntax: Hvorfor anbefales det
egentlig i
> > C++ at man anvender 0 i stedet for NULL?
>
> Det gør "man" heller ikke.

Hvem er "man" i den sammenhæng ?
Kig eventuelt i
The Design and Evolution of C++
Bjarne Stroustrup
ISBN 0-201-54330-3
side 230-231
og
The C++ Programming Language, Special Edtion
Bjarne Stroustrup
ISBN 0-201-70073-5
side 88 (samme side i Third Edition) inden du svarer.

> Nogen gør, og det er ud fra den underlige
> filosofi at folk skal kunne gætte hvad det betyder hvis de ser det i
> andet kode.

Det er ikke den argumentation som jeg kender, f.eks. fra ovennævnte
referencer.

> Mange anbefaler at man bruger NULL.

Hvem ?

Venlig hilsen

Mogens hansen



David Rasmussen (27-05-2002)
Kommentar
Fra : David Rasmussen


Dato : 27-05-02 11:24

Mogens Hansen wrote:
> "David Rasmussen" <pinkfloydhomer@yahoo.com> wrote
>>>C++ at man anvender 0 i stedet for NULL?
>>
>>Det gør "man" heller ikke.
>
>
> Hvem er "man" i den sammenhæng ?

Det samme kunne jeg spørge om. Det var derfor jeg satte "man" i
anførselstegn. Min pointe er, at det absolut ikke er alle der anbefaler
0 istedet for NULL.

> Kig eventuelt i
> The Design and Evolution of C++
> Bjarne Stroustrup
> ISBN 0-201-54330-3
> side 230-231
> og
> The C++ Programming Language, Special Edtion
> Bjarne Stroustrup
> ISBN 0-201-70073-5
> side 88 (samme side i Third Edition) inden du svarer.
>

Det ved jeg, men det er en person. En vigtig person, men stadig kun en
person.

>
>>Nogen gør, og det er ud fra den underlige
>>filosofi at folk skal kunne gætte hvad det betyder hvis de ser det i
>>andet kode.
>
>
> Det er ikke den argumentation som jeg kender, f.eks. fra ovennævnte
> referencer.
>

Jeg kender også andre argumenter. Ingen af dem er gode efter min mening,
heller ikke det jeg selv citerede.

>
>>Mange anbefaler at man bruger NULL.
>
>
> Hvem ?
>

Hvad skal man svare på sådan et spørgsmål? Søg på google groups.

/David


Mogens Hansen (27-05-2002)
Kommentar
Fra : Mogens Hansen


Dato : 27-05-02 13:38


"David Rasmussen" <pinkfloydhomer@yahoo.com> wrote
> Mogens Hansen wrote:
> > "David Rasmussen" <pinkfloydhomer@yahoo.com> wrote

[snip]
> > Kig eventuelt i
> > The Design and Evolution of C++
> > Bjarne Stroustrup
> > ISBN 0-201-54330-3
> > side 230-231
> > og
> > The C++ Programming Language, Special Edtion
> > Bjarne Stroustrup
> > ISBN 0-201-70073-5
> > side 88 (samme side i Third Edition) inden du svarer.
> >
>
> Det ved jeg, men det er en person. En vigtig person, men stadig kun en
> person.
>

Det afgøres ikke med flertalts beslutning, hvad der er mest
anbefalelsesværdigt.
Det afgøres vel nærmere ved at belyse konsekvenserne af den ene eller den
anden beslutning. I sidste ende er det den enkelte (evt. en metode afdeling)
, der afgør hvad der bliver brugt.
Ikke alles evne til at belyse konsekvenserne er lige gode - derfor er den
enes udsagn ikke lige så godt som den andens.
Personligt har jeg ikke noget imod at der bliver argumenteret sagligt imod
det der står i de 2 referencer jeg henviste til. Jeg har blot ikke set
saglige argumenter, for hvorvidt man bør bruge 0 eller NULL, i denne tråd.

> >
> >>Nogen gør, og det er ud fra den underlige
> >>filosofi at folk skal kunne gætte hvad det betyder hvis de ser det i
> >>andet kode.
> >
> >
> > Det er ikke den argumentation som jeg kender, f.eks. fra ovennævnte
> > referencer.
> >
>
> Jeg kender også andre argumenter. Ingen af dem er gode efter min mening,
> heller ikke det jeg selv citerede.
>

Nu blev jeg forvirret.
Siger du blot "at der findes mennesker der foretrækker at man bruger NULL
frem for 0" - hvilket jo givetvis er objektivt rigtigt.
Eller anbefaler _du_ at man bruger NULL frem for 0, til angivele af en
pointer ikke peger på noget gyldigt objekt ?

> >
> >>Mange anbefaler at man bruger NULL.
> >
> >
> > Hvem ?
> >
>
> Hvad skal man svare på sådan et spørgsmål? Søg på google groups.
>

Jeg tænkte at du måske havde nogle konkrete, troværdige personer i tankerne,
da du skrev "Mange anbefaler at man bruger NULL", og at du ville dele den
viden med andre.
Konstellationen af _hvad_ der bliver sagt af _hvem_ spiller for mig en stor
rolle, i vurderingen af et udsagn.

Venlig hilsen

Mogens Hansen



David Rasmussen (27-05-2002)
Kommentar
Fra : David Rasmussen


Dato : 27-05-02 14:33

Mogens Hansen wrote:
> "David Rasmussen" <pinkfloydhomer@yahoo.com> wrote
>
>>
>>Det ved jeg, men det er en person. En vigtig person, men stadig kun en
>>person.
>>
>
>
> Det afgøres ikke med flertalts beslutning, hvad der er mest
> anbefalelsesværdigt.

Nej. Hvem har sagt det?

> Det afgøres vel nærmere ved at belyse konsekvenserne af den ene eller den
> anden beslutning. I sidste ende er det den enkelte (evt. en metode afdeling)
> , der afgør hvad der bliver brugt.

Hvad har det med mig at gøre?

> Ikke alles evne til at belyse konsekvenserne er lige gode - derfor er den
> enes udsagn ikke lige så godt som den andens.

Nej...

> Personligt har jeg ikke noget imod at der bliver argumenteret sagligt imod
> det der står i de 2 referencer jeg henviste til. Jeg har blot ikke set
> saglige argumenter, for hvorvidt man bør bruge 0 eller NULL, i denne tråd.
>

Det er muligt. Jeg er ihvertfald ikke kommet med nogle. Jeg har ikke
prøvet på at argumentere for hvorfor det ene er bedre end det andet,
blot at det ikke er rigtigt at "man" altid anbefaler det ene eller det
andet, fordi det afhænger af hvem "man" er. Jeg kan da tilføje at jeg
har set yderst kompetente mennesker argumentere for begge dele.

Iøvrigt har jeg heller ikke set nogle saglige argumenter fra din side om
brugen af 0 eller NULL?

>>
>>Jeg kender også andre argumenter. Ingen af dem er gode efter min mening,
>>heller ikke det jeg selv citerede.
>>
>
>
> Nu blev jeg forvirret.

Stakkel ;)

> Siger du blot "at der findes mennesker der foretrækker at man bruger NULL
> frem for 0" - hvilket jo givetvis er objektivt rigtigt.

Ja, men mere end det. Jeg påstår at der ikke er nogen generel konsensus
om hvilken af de to man anbefaler. Man kan derimod finde en stor lejr
som har sine kompetente medlemmer, der anbefaler det ene, og ligeså med
det andet.
Med andre ord:
Det blev sagt at "man" anbefalede 0 fremfor NULL. Jeg siger blot: nej,
det gør "man" ikke. Nogen gør, andre gør ikke.

> Eller anbefaler _du_ at man bruger NULL frem for 0, til angivele af en
> pointer ikke peger på noget gyldigt objekt ?
>

Jeg bruger personligt NULL, argumentet er at det efter min mening i
højere grad tydeliggør programmørens intention. Jeg kan ikke se nogle
fordele ved at bruge 0. Det pæneste ville dog efter min mening være hvis
'null' var et nøgleord.
Men for at svare på dit spørgsmål: Jeg anbefaler ikke noget som helst.
Jeg reagerer på udsagnet om at "man" anbefaler det ene aller det andet.

>
>>>>Mange anbefaler at man bruger NULL.
>>>
>>>
>>>Hvem ?
>>>
>>
>>Hvad skal man svare på sådan et spørgsmål? Søg på google groups.
>>
>
>
> Jeg tænkte at du måske havde nogle konkrete, troværdige personer i tankerne,
> da du skrev "Mange anbefaler at man bruger NULL", og at du ville dele den
> viden med andre.

Pointen var at der er for mange til at man kan liste dem her. Ligesom
der også er for mange der mener det modsatte. Istedet for at jeg nævner
en eller to (du har kun nævnt en, og jeg er ikke nødvendigvis specielt
enig med BS i hvad god stil eller godt sprogdesign er), så kunne du jo
kigge i google groups. Der er bunker af kompetente mennesker i f.eks.
comp.lang.c++ (f.eks. de fleste af dem der er med til at arbejde på
standarden), og mit umiddelbare indtryk er at folk er delt i to her.
Også de "meget kompetente" hvem det så end måtte være.

> Konstellationen af _hvad_ der bliver sagt af _hvem_ spiller for mig en stor
> rolle, i vurderingen af et udsagn.

Det kan jeg godt forstå. Omvendt så overbeviser det ikke mig om noget
som helst at een "anerkendt" person udtaler dette eller hint. Jeg er som
sagt ikke specielt enig med BS i mange af hans valg omkring C++.

/David



Mogens Hansen (27-05-2002)
Kommentar
Fra : Mogens Hansen


Dato : 27-05-02 16:12


"David Rasmussen" <pinkfloydhomer@yahoo.com> wrote
> Mogens Hansen wrote:
> > "David Rasmussen" <pinkfloydhomer@yahoo.com> wrote
> >
> >>
> >>Det ved jeg, men det er en person. En vigtig person, men stadig kun en
> >>person.
> >>
> >
> >
> > Det afgøres ikke med flertalts beslutning, hvad der er mest
> > anbefalelsesværdigt.
>
> Nej. Hvem har sagt det?
>

Det var et svar på dit udsagn "... men stadig kun en person", og jeg mener
egentlig ikke det giver argumenterne mere eller mindre vægt at tælle hvor
mange der mener det ene og hvor mange der mener det andet.

> > Det afgøres vel nærmere ved at belyse konsekvenserne af den ene eller
den
> > anden beslutning. I sidste ende er det den enkelte (evt. en metode
afdeling)
> > , der afgør hvad der bliver brugt.
>
> Hvad har det med mig at gøre?
>

Se ovenfor.

[snip]
> Iøvrigt har jeg heller ikke set nogle saglige argumenter fra din side om
> brugen af 0 eller NULL?
>

Nej, overhovedet ikke. Jeg gider ikke rigtigt. Det er et spørgsmål om smag.
Jeg har blot henvist til 2 referencer, og det er den anbefaling jeg bruger i
praksis.

[snip]
> Men for at svare på dit spørgsmål: Jeg anbefaler ikke noget som helst.

Det var det det jeg misforstod.


[snip]
> Pointen var at der er for mange til at man kan liste dem her. Ligesom
> der også er for mange der mener det modsatte. Istedet for at jeg nævner
> en eller to (du har kun nævnt en, og jeg er ikke nødvendigvis specielt
> enig med BS i hvad god stil eller godt sprogdesign er), så kunne du jo
> kigge i google groups.

Det har jeg gjort.
Jeg kunne umiddelbart finde at
* Matt Austern foretrækker 0
(http://groups.google.com/groups?q=Matt+Austern+NULL+prefer&hl=da&lr=&ie=UTF
8&oe=UTF8&selm=fxtvgzwfw8p.fsf%40isolde.engr.sgi.com&rnum=2).
* Greg Comeau brugte i 1993 0
(http://groups.google.com/groups?q=g:thl2708432566d&dq=&hl=da&lr=&ie=UTF8&oe
=UTF8&selm=28sqv6%2410v%40panix.com)

Der er flere der siger at det ikke gør nogen forskel (let fortolkning af
deres udsagn):
* Andrew Koenig
(http://groups.google.com/groups?q=g:thl759326989d&dq=&hl=da&lr=&selm=F6zvMC
..5tE%40research.att.com)
* Francis Glassborow
(http://groups.google.com/groups?q=g:thl1126786414d&dq=&hl=da&lr=&selm=gNnN%
24KAC7e26Ewl9%40ntlworld.com)

> Der er bunker af kompetente mennesker i f.eks.
> comp.lang.c++ (f.eks. de fleste af dem der er med til at arbejde på
> standarden), og mit umiddelbare indtryk er at folk er delt i to her.

Det er ikke mit indtryk, men jeg har måske kigget de forkerte steder.
Jeg kunne ikke finde navne, som jeg genkender personer kendt fra C++
Standard komiteen (som jeg ikke har noget med at gøre, så der er sikkert
mange mulige navne jeg ikke genkender), der anbefaler at bruge NULL frem for
0.


Venlig hilsen

Mogens Hansen



Anders Melchiorsen (26-05-2002)
Kommentar
Fra : Anders Melchiorsen


Dato : 26-05-02 14:50

"Bjarke Dahl Ebert" <bebert@worldonline.dk> skrev:

> [...] Nu vi er ved unødvendigt ubfuscated syntax: Hvorfor anbefales
> det egentlig i C++ at man anvender 0 i stedet for NULL? [...]

Mange af dine spørgsmål er besvaret i Stroustrups bog, "The Design and
Evolution of C++". Man kan selvfølgelig være uenig i designvalgene,
men de er ikke foretaget nær så hovedkulds som du ser ud til at mene.


Anders.

--
Min adresse er gyldig i en uge.
Derefter skal (kun) '.dJJJ-YY' delen fjernes.

David Rasmussen (25-05-2002)
Kommentar
Fra : David Rasmussen


Dato : 25-05-02 16:55

Martin Moller Pedersen wrote:
> In <3CEF7096.5060704@yahoo.com> David Rasmussen <pinkfloydhomer@yahoo.com> writes:
>
>>Den kan jo ikke advare hver gang der sker et implicit cast.
>
>
> Saa oev til C++, for at den ikke have en rigtig boolean type modsat java,
> hvor jeg helt sikkert ville have faaet en fejl.
>

Det er skam en rigtig boolean type. Der sker bare automatisk cast mellem
dem.

/David


Per Abrahamsen (27-05-2002)
Kommentar
Fra : Per Abrahamsen


Dato : 27-05-02 17:49

David Rasmussen <pinkfloydhomer@yahoo.com> writes:

> Vel snarere at der sker automatiske casts mellem visse typer. Det er
> faktisk irriterende at man som programmør ikke selv kan bestemme
> hvilke casts der skal ske automatisk. Det er noget der er under
> overvejelse i comp.std.c++.

IMPLICIT NONE



Per Abrahamsen (27-05-2002)
Kommentar
Fra : Per Abrahamsen


Dato : 27-05-02 17:53

Byrial Jensen <bjensen@nospam.dk> writes:

> Bjarke Dahl Ebert <bebert@worldonline.dk> skrev:
>> "Byrial Jensen" <bjensen@nospam.dk> wrote:
>>> Bjarke Dahl Ebert <bebert@worldonline.dk> skrev:
>>>
>>> > En C-programmør skriver jo rask væk "if (n)" i stedet for "if (n!=0)".
>>>
>>> Ja, for hvis n er en int, har de 2 udtryk samme type!
>>
>> Da ikke i C++.
>
> En C-programmør skriver per definition C-programmer, ikke
> C++-programmer.

Man kan godt skrive både C og C++ programmer på samme tid.

Kodepraksis i C++ er i høj grad arvet fra C, og sprogudvidelser i C++
er nødt til at tage hensyn til kodepraksis.

Byrial Jensen (25-05-2002)
Kommentar
Fra : Byrial Jensen


Dato : 25-05-02 11:50

Bertel Lund Hansen <nospam@lundhansen.dk> skrev:
> Hej alle
>
> Kan man stole på at true == 1?

NB. Det følgende gælder for C99. Jeg ved ikke i hvilken udtsrækning
det også gælder for C++.

* Logiske operatorer (== != < <= > >= ! && ||) returnerer alle
1 for sand og 0 for falsk.

* is-funktionerne i <ctype.h> (isalnum, isalpha, isblank osv.)
returnerer enten 0 eller ikke-0. Man kan ikke regne med nogen
bestemt "ikke-0"-værdi.

* isw-funktionerne i <wctype.h> (iwsalnum, iswalpha, iswblank
osv.) returnerer enten 0 eller ikke-0. Man kan ikke regne med
nogen bestemt "ikke-0"-værdi.

* is-makroerne i <math.h> (isgreater, isless osv.) returnerer
altid 1 eller 0.

* true og false er makroer defineret i <stdbool.h>. De skal
være defineret til hhv. 1 og 0.

Så hvis <stdbool.h> er inkluderet, og hvis makroerne deri ikke
efterfølgende er omdefineret, kan man i C99 roligt regne med at
true-1 giver 0.

> I én af de lærebøger som jeg nu har anskaffet (Accelerated C++),
> står der at true-1 reurnerer 0 eller -1.

Står der virkelig at true-1 kan være -1? I så fald skulle true
være 0.

Bertel Lund Hansen (25-05-2002)
Kommentar
Fra : Bertel Lund Hansen


Dato : 25-05-02 12:58

Byrial Jensen skrev:

>Står der virkelig at true-1 kan være -1?

Nej, det var en tanketorsk.

--
Bertel
http://lundhansen.dk/bertel/   FIDUSO: http://fiduso.dk/

David Rasmussen (25-05-2002)
Kommentar
Fra : David Rasmussen


Dato : 25-05-02 12:05

Bertel Lund Hansen wrote:
> Hej alle
>
> Kan man stole på at true == 1?
>
> I én af de lærebøger som jeg nu har anskaffet (Accelerated C++),
> står der at true-1 reurnerer 0 eller -1.
>
> Jeg ved ikke rigtig om jeg ville benytte mig af det hvis det
> passede.
>

True er _altid_ 1, hvis den castes til en heltalstype. true - 1 = 0
_altid_. Jeg kan ikke forstå hvis der står noget andet i AC++. Hvor står
det henne?

Jeg citerer fra TC++PL, side 71 ca. midten:

By definition, true has the value 1 when converted to an integer and
false has the value 0.

og

In arithmetic and logical expressions, bools are converted to ints.

/David


Rasmus Kaae (26-05-2002)
Kommentar
Fra : Rasmus Kaae


Dato : 26-05-02 19:34


"Bertel Lund Hansen" <nospam@lundhansen.dk> wrote in message
news:14oueusf0oq86vpl2bofdp1k4uk3jskirh@sunsite.auc.dk...
> Hej alle
>
> Kan man stole på at true == 1?
>
> I én af de lærebøger som jeg nu har anskaffet (Accelerated C++),
> står der at true-1 reurnerer 0 eller -1.
>
> Jeg ved ikke rigtig om jeg ville benytte mig af det hvis det
> passede.


Jeg tror det er fordi der er forskellige boolske-definitioner, specielt
bruger win32 api'et BOOL som er en unsigned int (UINT) og her er TRUE==0 og
FALSE alt andet




David Rasmussen (26-05-2002)
Kommentar
Fra : David Rasmussen


Dato : 26-05-02 19:47

Rasmus Kaae wrote:
> "Bertel Lund Hansen" <nospam@lundhansen.dk> wrote in message
> news:14oueusf0oq86vpl2bofdp1k4uk3jskirh@sunsite.auc.dk...
>
>>Hej alle
>>
>>Kan man stole på at true == 1?
>>
>>I én af de lærebøger som jeg nu har anskaffet (Accelerated C++),
>>står der at true-1 reurnerer 0 eller -1.
>>
>>Jeg ved ikke rigtig om jeg ville benytte mig af det hvis det
>>passede.
>
>
>
> Jeg tror det er fordi der er forskellige boolske-definitioner, specielt
> bruger win32 api'et BOOL som er en unsigned int (UINT) og her er TRUE==0 og
> FALSE alt andet
>
>
>

Nej, bool er en indbygget type i C++.

/David


Rasmus Kaae (27-05-2002)
Kommentar
Fra : Rasmus Kaae


Dato : 27-05-02 17:08

> > Jeg tror det er fordi der er forskellige boolske-definitioner, specielt
> > bruger win32 api'et BOOL som er en unsigned int (UINT) og her er TRUE==0
og
> > FALSE alt andet
> Nej, bool er en indbygget type i C++.

læg mærke til uppercase i BOOL og det faktum at jeg skrev det var win32
api'et jeg hentydede til.



Søg
Reklame
Statistik
Spørgsmål : 177496
Tips : 31968
Nyheder : 719565
Indlæg : 6408491
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste