Warning unreachable code

Für Fragen von Einsteigern und Programmieranfängern...

Warning unreachable code

Beitragvon DL3AD » 22. Dez 2017, 12:12 Warning unreachable code

Hallo,

bekomme bei dieser Codezeile die Meldung Warning unreachable code
DBlib ist als string definiert.
Code: Alles auswählen
 
    if exe = '.exe' then DBlib:= 'sqlite3.dll' else DBlib:= 'libsqlite3.so.0';
 

Was hat dass zu bedeuten ? :shock:

Gruß Frank
DL3AD
 
Beiträge: 371
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.8.0 FPC 3.0.4) und Debian Stretch (L 1.8.0 FPC 3.0.4) | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon m.fuchs » 22. Dez 2017, 12:15 Re: Warning unreachable code

Mal davon ausgehend dass du exe wie in viewtopic.php?p=100343#p100343 definiert hast: Je nach Betriebssystem kann einer von beiden Zweigen deines if-Statements niemals aufgerufen werden. Deswegen gibt es diese Warnung.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
m.fuchs
 
Beiträge: 1972
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.8.4, FPC 3.0.4) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon DL3AD » 22. Dez 2017, 12:20 Re: Warning unreachable code

... bedeutet aber dass die Codezeile so OK ist ?
DL3AD
 
Beiträge: 371
Registriert: 13. Sep 2013, 11:07
Wohnort: Rügen
OS, Lazarus, FPC: Win7 (L 1.8.0 FPC 3.0.4) und Debian Stretch (L 1.8.0 FPC 3.0.4) | 
CPU-Target: 32Bit/64Bit
Nach oben

Beitragvon m.fuchs » 22. Dez 2017, 12:44 Re: Warning unreachable code

Ja, ist nur ein Hinweis darauf, dass du dir einen Teil des Codes sparen könntest. Wenn dich das (berechtigterweise) stört, dann solltest du die Library-Namen auch per ifdef festlegen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
m.fuchs
 
Beiträge: 1972
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.8.4, FPC 3.0.4) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon Mathias » 22. Dez 2017, 18:34 Re: Warning unreachable code

dann solltest du die Library-Namen auch per ifdef festlegen.

Das sieht dann bei dir so aus:
Code: Alles auswählen
  {$IFDEF windows}
  DBlib:= 'sqlite3.dll';
  {$ENDIF}
  {$IFDEF Linux}
  DBlib:= 'libsqlite3.so.0';
  {$ENDIF}

Somit wird nur der Code welcher auch für das OS gebraucht wird mit kompiliert.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon compmgmt » 22. Dez 2017, 19:02 Re: Warning unreachable code

DL3AD hat geschrieben:
Code: Alles auswählen
if exe = '.exe' then DBlib:= 'sqlite3.dll' else DBlib:= 'libsqlite3.so.0';

So etwas zu vergleichen um das aktuelle OS rauszubekommen ist nicht wirklich schön. Mach es lieber mit $ifdef, so wie Mathias es beschrieben hat. Solltest du es an mehreren Stellen brauchen, kannst du es natürlich genauso wie bei der exe machen:
Code: Alles auswählen
const
  Lib = {$ifndef mswindows} 'lib' {$else} '' {$endif};
  LibExt = {$ifdef mswindows}
      // Windows
      '.dll'
    {$else}
      {$ifdef darwin}
        // macOS (OS X, nicht MacOS Classic)
        '.dylib'
      {$else}
        // Alles andere (Linux, BSD, ...)
        '.so.0'
      {$endif}
    {$endif};
begin 
  ...
  if FileExists(Lib + 'sqlite3' + LibExt) then ...
  ...
end;

Wobei ich mir bei der Konstante "Lib" nicht ganz sicher bin, ob das richtig ist, da ich nicht weiß, ob man bei macOS überhaupt ein "lib" vor den Dateinamen setzt oder nicht.
Der Prozesseinstiegspunkt "SignaturLaden" in Signatur.dll konnte nicht gefunden werden.
compmgmt
 
Beiträge: 314
Registriert: 25. Nov 2015, 17:06
Wohnort: in der Nähe von Stuttgart
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4 | 
CPU-Target: i386 + x86_64
Nach oben

Beitragvon theo » 22. Dez 2017, 20:30 Re: Warning unreachable code

Es gibt die auch die betriebssystemabhängige Konstante SharedSuffix in dynlibs

http://wiki.freepascal.org/Lazarus/FPC_ ... ic_library
https://www.freepascal.org/docs-html/rt ... uffix.html
theo
 
Beiträge: 8070
Registriert: 11. Sep 2006, 18:01

• Themenende •

Zurück zu Einsteigerfragen



Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 6 Gäste

porpoises-institution
accuracy-worried