ok oder nicht ok ...

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

ok oder nicht ok ...

Beitrag von AUGE_OHR »

hi,

angenommen ich hätte so was.

Code: Alles auswählen

cTest := MyFunc( isworking() )

FUNCTION MyFunc()
RETURN "blabla"

FUNCTION isworking()
RETURN "jaja"
wenn das Programm nicht abstürzt ... ist dann die Function isworking() ok ?
wird die "innerste" Funktion "zuerst" ausgeführt ?

mein Problem : unter harbour mit activeX bekomme ich per MAPI kein "DateTime"

Code: Alles auswählen

BEGIN SEQUENCE
   LogMe("1 CreationTime")
   cStringStart := oItem:treatDateAsString( .T. ):getProperty( "CreationTime")
   LogMe("2 CreationTime"+cStringStart)
   REPLACE CALENDAR->CREDATE     WITH cStringStart
   nHit++
RECOVER USING oError
   nMiss++
   LogMe("0 CreationTime               FAIL")
END SEQUENCE
ergibt
1 CreationTime
0 CreationTime FAIL
aber wenn ich nun

Code: Alles auswählen

cStringStart := MyFunc(oItem:treatDateAsString( .T. ):getProperty( "CreationTime"))
verwende bekomme ich "blabla" ...
wieso bekomme ich dann mit MyFunc() keinen "Absturz" ?
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ok oder nicht ok ...

Beitrag von brandelh »

Hallo Jimmy,

die Antwort auf diese Zeilen ist einfach, immer zuerst die Klammern auflösen, manchmal muss man dann eine Funktion aufrufen ;-)

cTest := MyFunc( isworking() ) ==> IsWorking() auflösen, denn da sind die innersten Klammern

FUNCTION isworking(); RETURN "jaja" ==> entspricht dem direkten Parameter "jaja"

cTest := MyFunc( "jaja" ) ==> MyFunc( "jaja" ) auflösen, also die Funktion mit dem Parameter "jaja" starten ...

FUNCTION MyFunc() ; RETURN "blabla" ==> die kümmert der Parameter aber nicht, somit entspricht der komplette Aufruf IMMER:

cTest := "blabla"

Xbase++ würde das immer so zurückgeben - da bin ich mir sicher ;-)

Es wäre aber möglich, dass ein Compiler diese "sinnlosen Umwege" erkennt und einfach wegrationalisiert :-)
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: ok oder nicht ok ...

Beitrag von AUGE_OHR »

hi,

sorry das letzte Beispiel von mir war "schlecht"

Code: Alles auswählen

PROCEDURE MAIN

 ? MyFunc( MakeError() )
 WAIT

RETURN

FUNCTION MyFunc()
RETURN "Blabla"

FUNCTION MakeError()
LOCAL nNull := 0
RETURN (1/nNull)
was kommt das raus und warum ... ?
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ok oder nicht ok ...

Beitrag von brandelh »

Hi,

soweit ich weiß erzeugt eine Division durch 0 in Xbase++ keine Fehlermeldung.
Siehe hierzu die XppError.prg ...

Zu deiner Frage, es könnte sein, dass der unnötige Parameter (die Funktion ruft keinen ab ! ) einfach ignoriert wird.
Wenn das zutrifft, wird deine fehlerhafte Funktion nicht aufgerufen.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: ok oder nicht ok ...

Beitrag von AUGE_OHR »

brandelh hat geschrieben:soweit ich weiß erzeugt eine Division durch 0 in Xbase++ keine Fehlermeldung.
Siehe hierzu die XppError.prg ...
hm ... ok ... immer noch ein "schlechtes" Beispiel ... wenn man mal einen Fehler erzeugen will ...
brandelh hat geschrieben:Zu deiner Frage, es könnte sein, dass der unnötige Parameter (die Funktion ruft keinen ab ! ) einfach ignoriert wird.
Wenn das zutrifft, wird deine fehlerhafte Funktion nicht aufgerufen.
hm ... das wäre interessant.

mein harbour DateTime Problem hat sich übrigens auch erledigt ;)

Code: Alles auswählen

cStringStart := TtoS(oItem:getProperty( "CreationTime"))
ergibt
20110303224414.157
gruss by OHR
Jimmy
Antworten