AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Warnung des Compilers verstehen

Ein Thema von hsg · begonnen am 22. Sep 2006 · letzter Beitrag vom 25. Sep 2006
Antwort Antwort
Seite 1 von 3  1 23      
hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#1

Warnung des Compilers verstehen

  Alt 22. Sep 2006, 09:44
Hallo Leute,

ich habe folgende Methode:
Delphi-Quellcode:
function TUser.Rechte(cModul: String) : string;
begin
  if AnsiCompareText(cModul,'Angebot') = 0 then Result := FAngebot
  else if AnsiCompareText(cModul,'Auftrag') = 0 then Result := FAuftrag
  else if AnsiCompareText(cModul,'AV') = 0 then Result := FAV
  else if AnsiCompareText(cModul,'Fertigung') = 0 then Result := FFertigung
  else if AnsiCompareText(cModul,'Einkauf') = 0 then Result := FEinkauf
  else if AnsiCompareText(cModul,'Versand') = 0 then Result := FVersand
  else if AnsiCompareText(cModul,'Reparatur') = 0 then Result := FReparatur
  else if AnsiCompareText(cModul,'Supply') = 0 then Result := FSupply
  else if AnsiCompareText(cModul,'Kunden') = 0 then Result := FKunden
  else if AnsiCompareText(cModul,'Artikel') = 0 then Result := FLager
  else if AnsiCompareText(cModul,'Projekt') = 0 then Result := FProjekt
  else if AnsiCompareText(cModul,'Zeichnung') = 0 then Result := FZeichnung
  else if AnsiCompareText(cModul,'Pruefmtl') = 0 then Result := FPruefmtl
  else if AnsiCompareText(cModul,'Iso9000') = 0 then Result := FIso9000
  else if AnsiCompareText(cModul,'System') = 0 then Result := FSystem
  else if AnsiCompareText(cModul,'Dokument') = 0 then Result := FDok
  else Result := '';
end;
Beim Übersetzen meldet nun der Compiler "W1035 Rückgabewert der Funktion 'TUser.Rechte' könnte undefiniert sein"
Warum?
Auch ein Initialisieren von Result ändert nichts an der Meldung.

Irgendwelche Ideen?
Gruss Jörg
  Mit Zitat antworten Zitat
Benutzerbild von Techcrawler
Techcrawler

Registriert seit: 14. Sep 2006
Ort: Neukirchen-Vluyn
40 Beiträge
 
Delphi 2006 Architect
 
#2

Re: Warnung des Compilers verstehen

  Alt 22. Sep 2006, 09:57
Sowas meldet der Compiler immer, wenn ein Rückgabewert nicht eindeutig gesetzt werden _könnte_!
Leider erkennt der Compiler nicht, dass in deinem Fall das result immer gesetzt wird (durch das abschließende else).
Am besten, du läßt das else am ende weg und schreibst _vor_ dem if Teil ein
result := '';
dann sollte die Meldung fort sein.
Sascha
  Mit Zitat antworten Zitat
hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Warnung des Compilers verstehen

  Alt 22. Sep 2006, 10:07
Zitat von Techcrawler:
Am besten, du läßt das else am ende weg und schreibst _vor_ dem if Teil ein
result := '';
dann sollte die Meldung fort sein.
Hatte ich probiert (bzw. ist so jetzt eingebaut), die Meldung kommt trotzdem.
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#4

Re: Warnung des Compilers verstehen

  Alt 22. Sep 2006, 10:07
An sich sollte eine Warnung in dem Fall nicht kommen... Entweder es ist ein Bug, oder der Kompiler meint eine andere Methode namens "Rechte". Hast du diese ueberladen?
Ansonsten koenntest du dich langsam ans Problem herantasten, und bspw. den gesamten Teil auskommentieren, und nur result etwas zuweisen, und dann Schritt fuer Schritt langsam den originalen Code wiederherstellen, bis die Meldung kommt. Damit kannst du den Problempunkt eingrenzen.

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
rider

Registriert seit: 11. Aug 2006
90 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Warnung des Compilers verstehen

  Alt 22. Sep 2006, 10:21
Normalerweise sollte hier keine Warnung kommen. Der Compiler erkennt sehr wohl, dass Result in diesem Fall immer definiert ist.
Aus deinem Code geht leider nicht hervor, wie z.B. TUser und die ganzen FAngebot, FAuftrag, usw. definiert sind.
  Mit Zitat antworten Zitat
hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Warnung des Compilers verstehen

  Alt 22. Sep 2006, 10:48
Zitat von rider:
Normalerweise sollte hier keine Warnung kommen. Der Compiler erkennt sehr wohl, dass Result in diesem Fall immer definiert ist.
Aus deinem Code geht leider nicht hervor, wie z.B. TUser und die ganzen FAngebot, FAuftrag, usw. definiert sind.
TUser ist eine selbstgeschriebene Klasse in der Unit (Abgeleitet von TObject), FAngebot, etc. sind Klassenmember vom Typ string

Zitat von JasonDX:
Ansonsten koenntest du dich langsam ans Problem herantasten, und bspw. den gesamten Teil auskommentieren, und nur result etwas zuweisen, und dann Schritt fuer Schritt langsam den originalen Code wiederherstellen, bis die Meldung kommt. Damit kannst du den Problempunkt eingrenzen.
Habe ich jetzt mal gemacht: Es scheint an der Anzahl der "if then else" Blöcke zu liegen. Bei 10 Blöcken ist die Welt noch in Ordnung, kommt ein weiterer hinzu kommt die Warnung.
Dabei ist es egal welcher der Blöcke dann hinzukommt oder welche vorher weggelassen wurden.

Gruss Jörg
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Warnung des Compilers verstehen

  Alt 22. Sep 2006, 11:44
Zitat von hsg:
Habe ich jetzt mal gemacht: Es scheint an der Anzahl der "if then else" Blöcke zu liegen. Bei 10 Blöcken ist die Welt noch in Ordnung, kommt ein weiterer hinzu kommt die Warnung.
Dabei ist es egal welcher der Blöcke dann hinzukommt oder welche vorher weggelassen wurden.
Das hab ich auch grad festgestellt und ich kann's ja irgendwie verstehen, dass der Compiler diese Prüfungen nur bis zu einer gewissen Iterationstiefe (oder so) macht. Wieso er aber meckert, selbst wenn man Result := 'Blah'; als erste Zeile hinzufügt, verstehe ich nicht: Die Initialisierung von Result kann man ja schlecht wieder rückgängig machen.
Uli Gerhardt
  Mit Zitat antworten Zitat
rider

Registriert seit: 11. Aug 2006
90 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Warnung des Compilers verstehen

  Alt 22. Sep 2006, 11:44
Zitat von hsg:
Habe ich jetzt mal gemacht: Es scheint an der Anzahl der "if then else" Blöcke zu liegen. Bei 10 Blöcken ist die Welt noch in Ordnung, kommt ein weiterer hinzu kommt die Warnung.
Dann scheint's wohl doch am Compiler zu liegen - ich hab's nur mit ein paar else Blöcken getestet.
Dann bleibt wohl nichts anderes übrig, als den ganzen Block mit {$WARNINGS OFF} {$WARNINGS ON} zu markieren.

Evtl. würde ich einen Bericht ins Borland Quality Central setzen.
Womöglich hängt es aber mit diesem Bug zusammen:
http://qc.borland.com/wc/qcmain.aspx?d=735
  Mit Zitat antworten Zitat
hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Warnung des Compilers verstehen

  Alt 22. Sep 2006, 12:04
der dortige Fehler ist ja immer noch in Delphi (BDS 2006)
Scheint mir in der Tat der gleiche Fehler zu sein.

Na gut, werde ich wohl die Warnings dort ausschalten.

Danke und Gruss
Jörg
  Mit Zitat antworten Zitat
nieurig

Registriert seit: 26. Apr 2004
113 Beiträge
 
Delphi 6 Professional
 
#10

Re: Warnung des Compilers verstehen

  Alt 22. Sep 2006, 13:01
Hi Leute!
ich löse diese Probleme immer mit

Function foo() : String
VAR Erg:String;
Erg := '';

// dann den ganzen if - Kram
if ...
Erg := ????


// und am Ende EIN result
result := Erg;


Schöne Grüße
Niels
Erspare Dir die Gedanken über ungelegte Eier !!!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz