variable unused / not have been set before first use

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Benutzeravatar
Magic
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 343
Registriert: Mo, 11. Jul 2011 12:01

variable unused / not have been set before first use

Beitrag von Magic »

Hi,

ich nutze in meinem Code die drei u.g. DLL Funktionen.

Code: Alles auswählen

DLLFUNCTION wapiGetDefaultPrinter( @pPrinter, @pwdBufferSize ) ;
            ALIAS GetDefaultPrinterA ;
            USING OSAPI ;
            FROM WINSPOOL.DRV

DLLFUNCTION wapiSetDefaultPrinter( pPrinter ) ;
            ALIAS SetDefaultPrinterA ;
            USING OSAPI ;
            FROM WINSPOOL.DRV

DLLFUNCTION wapiShellExecute( nHWND, cOperation, cFile, cParms, cDirectory, nOpenMode );
            ALIAS ShellExecuteA ;
            USING OSAPI ;
            FROM SHELL32.DLL
Beim kompilieren mit dem Schaltern

Code: Alles auswählen

COMPILE_FLAGS = /ga /wi /wl /wu /b /osource\ /q
bekomme ich immer (für jede der drei Funktionen) folgende Warnung:

Code: Alles auswählen

STATIC variable cTpl may not have been set before first use
LOCAL variable nDll unused
Da ich kein Freund von irgendwelchen Warnungen bin, frage ich mich wie ich diese Warnung "beheben" kann. Ist das irgendwie möglich? Die Compiler Flags sollen natürlich weiterhin so bestehen.
Gruß,
Magic
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: variable unused / not have been set before first use

Beitrag von Manfred »

Hm

entferne doch mal den /wu Schalter. Der sorgt zumindest für die Warnungen nicht benutzter Variablen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Magic
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 343
Registriert: Mo, 11. Jul 2011 12:01

Re: variable unused / not have been set before first use

Beitrag von Magic »

Hi Manfred,
Manfred hat geschrieben:entferne doch mal den /wu Schalter.
Magic hat geschrieben:Die Compiler Flags sollen natürlich weiterhin so bestehen.
genau diesen Weg möchte ich nicht nehmen :wink:
Ich könne ja auch beide entfernen /wu und /wi. Damit hätte ich dann die Symptome, aber eben nicht die Ursache behoben. Aber ich will an die Ursache dran.
Gruß,
Magic
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: variable unused / not have been set before first use

Beitrag von brandelh »

Wenn du mit dem XPP - Schalter /P die PPO Datei erzeugen läßt, kannst du sehen wie Alaska die Funktionen umsetzt.
Diese Umsetzung hat einige Mängel:

1. Es wird nicht geprüft, ob dllload() erfolgreich war -> das kann zu üblen Fehlern kommen, wenn die DLL fehlt.
2. Es gibt unbenutze Variablen ...
3. Es gibt LOCAL Variablen, die ohne Wertzuweisung verwendet werden (also NIL sind).

Fehler sind das keine, aber ich mag sie dennoch nicht und schreibe meist meine eigenen Funktionen die dllload() und dllcall() selbst aufrufen.
Ungenutzte Variablen werden dabei gelöscht, oder in einer dummy Zeile benutzt:

Code: Alles auswählen

if .f. // wird nie aufgerufen, benutzt aber die Variable !
  ? var...
endif
Variablen, die z.B. als NIL übergeben werden, deklariere ich als NIL:

Code: Alles auswählen

statt
LOCAL nMP1, nMP2 
einfach
LOCAL nMP1:=NIL, nMP2:=NIL
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: variable unused / not have been set before first use

Beitrag von georg »

Hallo,


also, ich habe versucht, die Code-Ausschnitte mal in ein Programm zu packen und mit den angegebenen Schaltern zu compilieren. Bei mir gibt es einen Syntax-Fehler in der ersten DLLFUNCTION, und beim Reinschauen in meine Dokumentation finde ich folgendes Syntax-Diagramm:

Code: Alles auswählen

DLLFUNCTION <FunctionName>( [[@]<Parameters,...>] ) ; 
      USING CDECL | OSAPI | STDCALL | SYSTEM ; 
       FROM <DllName>  
Also nix mit "ALIAS". Ist das ein Xbase++ Standard, oder verwendest Du eine zusätzliche Bibliothek, die "ALIAS" umsetzt?

Wenn ich die Zeilen mit der ALIAS Definition rausnehme, wird das Miniprogramm ohne Fehlerhinweis compiliert. Wo also kommt ALIAS her?


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Magic
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 343
Registriert: Mo, 11. Jul 2011 12:01

Re: variable unused / not have been set before first use

Beitrag von Magic »

georg hat geschrieben:Wo also kommt ALIAS her?
Schande, Schande, ... #-o :oops:
ich muss gestehen: ich weiß es nicht mehr!

Aber abgesehen davon, ist es bei mir völlig egal ob ich den ALIAS angebe oder nicht.
Die Warnungen kommen so oder so.
Gruß,
Magic
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: variable unused / not have been set before first use

Beitrag von georg »

Hallo, Magic -


welche Include-Dateien verwendest Du?

Und, wie sieht die PPO-Datei um die DLLFUNCTION herum aus?


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: variable unused / not have been set before first use

Beitrag von Manfred »

Hm,

das verstehe ich jetzt nicht so ganz. Die Schalter sind doch genau dazu da um solche Hinweise zu geben. Wenn man die nicht haben will, dann geht das doch nur, in dem man die Schalter weg lässt.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: variable unused / not have been set before first use

Beitrag von brandelh »

Nein Manfred,

der SINN der Warnungsschalter liegt darin, bedenklichen Code als Warnung zu melden,
damit der Programmierer diesen unbedenklich machen kann !

Beispiel:

aN := { "Hans","Peter","Ulli",) => Warnung ob das letzte NIL erwünscht ist.
Es kann sein, dass dies erwünscht ist und kein Problem verursacht hätte, dann kann man die Ursache der Meldung so beseitigen:
aN := { "Hans","Peter","Ulli", NIL ) => keine Warnung, alles ist KLAR und OK.
Aber wenn es ein Versehen war, wird spätestens hier ...

Code: Alles auswählen

aeval( aN , {|cN| msgbox( cN + " war hier !") } )
ein Laufzeitfehler auftreten, denn NIL + "..." ist nicht erlaubt ;-)

unnötige Variablen könnten einem egal sein, aber es könnte sich auch um einen Tippfehler handeln:

Code: Alles auswählen

local Vorname, 
Vormame := "Test "
msgbox(Vorname)
nicht falsch, aber du wirst dich wundern, warum sich das Programm so seltsam verhält ;-)

etc. ... wer alle Warnungen ordentlich beseitigt, macht sich etwas mehr Arbeit beim Schreiben,
hat aber viel mehr Sicherheit bei der Ausführung. Versuche mal so einen Buchstabendreher / Vertipper zu finden !
Gruß
Hubert
Benutzeravatar
Hans Zethofer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 278
Registriert: Fr, 27. Jan 2006 8:29
Wohnort: 2700 Wiener Neustadt
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: variable unused / not have been set before first use

Beitrag von Hans Zethofer »

=D> =D> =D> =D> =D>
so seh ich das auch aber leider machen das viele Programmierer so nicht - mit den Schaltern.
(die haben dann seitenweise unnötigen Code und unnötige, nicht definierte, falsch definiert, etc. VARS im Source)
die sich dann keiner mehr traut zu löschen weil Sie ja vielleicht auch noch irgendwo verwendet werden.
Ursache immer :der ursprüngliche Programmierstil war einfach unsauber oder es wurden Programmteile mit Blockcopy kopiert
und ausgebessert - aber nur oberflächlich.

Deshalb alles einschalten was sinnvoll ist - den compiler in eine textdatei umleiten und dann schauen ob keine Fehler mehr enthalten sind.
Schont die Nerven vom Kunden und dem Entwickler
Zusätzlich verschafft es einem schon einen sicheres Gefühl bei der Auslieferung - das wenigstens nicht wegen einer
unbedeutsamen Kleinigkeit die Software "abschmiert". :banghead:
_____________
lg
Hans
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: variable unused / not have been set before first use

Beitrag von Jan »

Ich habe aus genau dem Grund schon seit Jahren die Warnungen alle an. Es sammelt sich ansonsten immer wieder irgendwo Müll an, oder es gibt Laufzeitfehler wegen vergessern Variablen. Klar kann so eine Meldung dann nerven. Aber lieber nervt der Compiler mich kompilierens, als der Kunde mich später im täglichen Leben durch eine bitterböse Supportmeldung.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: variable unused / not have been set before first use

Beitrag von Wolfgang Ciriack »

Wenn man dann noch seinen Code nach nicht (mehr) benutzten Funktionen oder Prozeduren scannen lassen könnte...
Viele Grüße
Wolfgang
Benutzeravatar
Hans Zethofer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 278
Registriert: Fr, 27. Jan 2006 8:29
Wohnort: 2700 Wiener Neustadt
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: variable unused / not have been set before first use

Beitrag von Hans Zethofer »

Dieses Tool würde mich Interessieren - welches hast du da in Verwendeung?
_____________
lg
Hans
Benutzeravatar
Hans Zethofer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 278
Registriert: Fr, 27. Jan 2006 8:29
Wohnort: 2700 Wiener Neustadt
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: variable unused / not have been set before first use

Beitrag von Hans Zethofer »

Uuups - das war wohl eine Frage #-o
_____________
lg
Hans
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: variable unused / not have been set before first use

Beitrag von brandelh »

Die "unnötigen Funktionen" sind ja nicht soooo schlimm, immerhin haben wir ja genug RAM in der Kiste ...
In der neuesten PowerBasic Version wird automatisch "toter code" entfernt (also alles was nicht aufgerufen wurde),
davon können wir nur träumen, aber durch unsere MACROS könnte das auch schnell zum ALBTRAUM werden ;-)

Ich kenne nur die Handmethode ...

1. Quellcode öffnen ...
2. Function / procedure suchen ...
3. /* Block auskommentieren */
4. compilieren
5. Linker meldet diese Funktion als fehlend ? OK wir brauchen Sie.
6. Wenn nicht, einfach mal so stehen lassen (es könnte ja noch ein Macro ...)
7. Testen ...

Ehrlich, lohnt sich der Aufwand ? :wink:
Gruß
Hubert
Benutzeravatar
Hans Zethofer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 278
Registriert: Fr, 27. Jan 2006 8:29
Wohnort: 2700 Wiener Neustadt
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: variable unused / not have been set before first use

Beitrag von Hans Zethofer »

Es gab mal in Clipperzeiten (lang ist es her) ein Prog das alle PRG durchsucht hat und die Aufrufe dokumentierte

Code: Alles auswählen

                                          DOC
                     Source Code Documenter for Clipper 5.0x

                                  Version 3.01

                               Copyright (C) 1991
                          Clarity Computer Consultants
_____________
lg
Hans
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: variable unused / not have been set before first use

Beitrag von georg »

Hallo, Hans -


mit den heutigen Programmiertechniken, bei denen Funktionsaufrufe über Codeblocks unter anderem auch aus Dateifeldern gebaut werden, versagen die meisten Cross-Reference Tools.


Gruss,

Georg
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Hans Zethofer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 278
Registriert: Fr, 27. Jan 2006 8:29
Wohnort: 2700 Wiener Neustadt
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: variable unused / not have been set before first use

Beitrag von Hans Zethofer »

Die Frage ist ja - gibt es überhaupt etwas am Markt das (im wesentlichen) funktioniert?
Hat jemand irgendetwas im Einsatz?
Oder hat sich jemand etwas Ansatzweise selbst gestrickt?
_____________
lg
Hans
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: variable unused / not have been set before first use

Beitrag von brandelh »

Wenn man sich an einige Regeln hält, kann man schon etwas eingrenzen, ich nutze die Suchfunktion meines Texteditors,
der mehrere Dateien auch in Unterverzeichnissen durchsuchen kann (das ist ja nicht schwer nachzuprogrammieren).
Aber wer sich nicht an Regeln hält ...

Meine Regeln:

1. Zuweisungen in Feldern ausschließlich mit replace with ... in einer Zeile ...
2. Proceduren oder Funktionen werden immer mit Name gefolgt von '(' aufgerufen, kein Blank zwischen Name und '('
3. static functions verwende ich normalerweise nicht.
4. In Macros / codeblocks werden die Funktionen genauso geschrieben.
5. Was nicht geht, wird zumindest im Kommentar dahinter so geschrieben, dass es wieder zu den Regeln passt.
6. Vermeide GENIALE Konstruktionen, nimm lesbare ... man wird auch älter :D
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: variable unused / not have been set before first use

Beitrag von Manfred »

Hubert,

ich meine, Du hast meine "Frage" verneint, aber gleichzeitig gesagt, dass es genau so ist. Wie darf ich das jetzt verstehen? Ich sagte doch, genau dafür sind die Schalter gut. Wer die Meldungen nicht haben will, der soll sie abschalten. Nicht mehr und nicht weniger.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Hans Zethofer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 278
Registriert: Fr, 27. Jan 2006 8:29
Wohnort: 2700 Wiener Neustadt
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: variable unused / not have been set before first use

Beitrag von Hans Zethofer »

Hm,

das verstehe ich jetzt nicht so ganz. Die Schalter sind doch genau dazu da um solche Hinweise zu geben. Wenn man die nicht haben will, dann geht das doch nur, in dem man die Schalter weg lässt.
aber ich würde deinen Tipp so verstehen - wenn es dich nervt, deaktivierst du die Schalter und gut ist es. Aus dem Auge aus dem Sinn. :roll:
Hauptsache kein Compilerfehler und das EXE läßt sich starten.
_____________
lg
Hans
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: variable unused / not have been set before first use

Beitrag von Manfred »

Jaja,

so könnte man es auch sehen. War auch indirekt so gemeint. Sollte aber keine Empfehlung sein. Ich habe die Schalter auch alle an und versuche es dann so zu machen, dass es keine Meldungen mehr gibt. Seitdem ist die Fehlerquote drastisch gesunken. (zu alten Clipperzeiten gesehen)
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: variable unused / not have been set before first use

Beitrag von AUGE_OHR »

Hans Zethofer hat geschrieben:Hat jemand irgendetwas im Einsatz?
Oder hat sich jemand etwas Ansatzweise selbst gestrickt?
es gibt von DOC und SNAP wohl keine neuere Version aber es gibt eine Xbase++ CLICK! Version von Phil Barnett und Olaf870, 26. Juni 2007, public.xbase++.generic, CLICK!

ich habe mir die v2.03 als Ausgangsbasis genommen und "meinen" Wünschen angepasst.
gruss by OHR
Jimmy
Benutzeravatar
Hans Zethofer
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 278
Registriert: Fr, 27. Jan 2006 8:29
Wohnort: 2700 Wiener Neustadt
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: variable unused / not have been set before first use

Beitrag von Hans Zethofer »

was hast du so schon alles angepasst?
bist du schon zufrieden mit der Ausstattung oder fehlt noch was?
_____________
lg
Hans
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: variable unused / not have been set before first use

Beitrag von AUGE_OHR »

Hans Zethofer hat geschrieben:was hast du so schon alles angepasst?
bist du schon zufrieden mit der Ausstattung oder fehlt noch was?
naja ... hauptsächlich in FUNCTRAK.PRG Erweiterungen bei USE.
// NEW by Jimmy
/*
following function i include while i found it
usefull to have a overview of used DBF.

i realized that all "Table USE" Information
are available in STATIC aTable.

i try to strip those Information and also
use a new Section in CLICK.INI call MARCOLIST
(s.o. CMD_LIST.PRG ).

within yDBFSTRUC() i try to open DBF and use
DBSTRUCT(). i do use my own DBESYS.PRG with
FOXCDX ( CDXDBE_SIX3 ) support too.

*/
damit werden nun bei allen USE Befehlen in fremden Source Code die DBF Dateien identifiziert und darauf folgend der Versuch die Index Dateien der DBF "zuzuordnen".

bei Verwendung von Macro muss man den Source aber wie gehabt mit SNAPMACRO "vorbereiten"
ich verzichte auch auf die V5 "Umwandlungen" ... bloss nicht so viel Code verändern ...

Dokumentiert werden alle Class / Method / Procedure / Function aber nur die beiden letzten werden bei S87 ausgewertet ... was bei V5 raus kommt (hat Olaf870 geschrieben ... )

eine "grafische" Auswertung als Flowchat ist nicht vorgesehen, aber es liegen alle Informationen in einem "riesigen" Array vor.

also wer machen will ... ich hab ja oben die Msg von der "public.xbase++.generic" gepostet wo der Link zum Source angegeben wird.
gruss by OHR
Jimmy
Antworten