Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

__FB_ARGC__ gibts nicht mehr? o_O

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 27.11.2009, 21:47    Titel: __FB_ARGC__ gibts nicht mehr? o_O Antworten mit Zitat

Code:
Console.bas(27) error 41: Variable not declared, __FB_ARGC__ in 'ElseIf __FB_ARGC__ >= 2 Then'

Code:
ElseIf __FB_ARGC__ >= 2 Then

Das krasse:
Drei Zeilen weiter:
Code:
      If __FB_ARGC__ > 2 Then
         For n As Integer = 3 To __FB_ARGC__
            sFile += Command(n)
         Next
      EndIf

Und da gibts nichtmal ne Warning oder so. Habe auch mehrere male von den nicht bemängelten Stellen das ARGC kopiert... o_O
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 28.11.2009, 17:24    Titel: Antworten mit Zitat

Ich bilde mir ja ein, dass ich __FB_ARGC__ an ein paar Stellen verwende und es keine Probleme macht. Muss mal gucken.

For n As Integer = 3 To __FB_ARGC__ sollte eigentlich sowieso übersprungen werden, wenn __FB_ARGC__ <= 2. Die Bedingungsabfrage sollte an der Stelle nicht notwendig sein.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 28.11.2009, 18:15    Titel: Antworten mit Zitat

Das wundert mich ja auch irgendwie. Die danach folgenden Stellen produzieren keinen Fehler oder Warnung (was sie normalerweise tun sollten, wenn man eine nicht deklarierte Variable verwendet).
Lasse ich die Stelle weg, wo der Fehler auftritt (ersetzen durch festen Wert), dann tritt der Fehler bei der Nächsten auf. Irgendwie klingt das langsam immer mehr nach nen Compiler Bug o_O

Code:
Sub CCLI ()
   If Len(Command(1)) > 3 Then
      sFile = Command
      bSleepAfterEnd = FALSE
      bVerbose = FALSE
   ElseIf __FB_ARGC__ >= 2 Then
      sFile = Command(1)
      If sFile[0] <> Asc("-") Then CEnd(CINVALID_CMDLINE)
      
      bSleepAfterEnd = IIf(InStr(sFile, "s") <> 0, TRUE, FALSE)
      bVerbose = IIf(InStr(sFile, "v") <> 0, TRUE, FALSE)
      
      sFile = Command(2)
      If __FB_ARGC__ > 2 Then
         For n As Integer = 3 To __FB_ARGC__
            sFile += Command(n)
         Next
      EndIf
   Else
      CEnd(CINVALID_CMDLINE)
   EndIf
   
   If FileExists(sFile) = vbFalse Then
      CEnd("FATAL ERROR: File " & sFile & " doesn't exist!")
   EndIf
End Sub


Ich habs jetzt erstmal anders gelöst:
Code:
   If Len(Command(1)) > 3 Then
      sFile = Command
      bSleepAfterEnd = FALSE
      bVerbose = FALSE
   Else
      sFile = Command(1)
      If sFile[0] <> Asc("-") Then CEnd(CINVALID_CMDLINE)
      
      bSleepAfterEnd = IIf(InStr(sFile, "s") <> 0, TRUE, FALSE)
      bVerbose = IIf(InStr(sFile, "v") <> 0, TRUE, FALSE)
      
      sFile = Right(Command, Len(Command) - (Len(Command(1))+1))
   EndIf
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4702
Wohnort: ~/

BeitragVerfasst am: 28.11.2009, 23:36    Titel: Antworten mit Zitat

Zitat:
Lasse ich die Stelle weg, wo der Fehler auftritt (ersetzen durch festen Wert), dann tritt der Fehler bei der Nächsten auf.

Das wiederum wundert mich nicht. Nach der Fehlermeldung tut fbc so, als ob die Variable definiert worden wäre (als INTEGER glaube ich), das ist bei anderen nicht definierten Variablen auch so.

Code:
foobar = "foo"
print foobar
foobar = "bar"

Code:
fbc -w all "test.bas" (im Verzeichnis: /home/meinname/BASIC)
Kompilierung fehlgeschlagen.
test.bas(1) error 41: Variable not declared, foobar in 'foobar = "foo"'
test.bas(3) error 159: Invalid assignment/conversion in 'foobar = "bar"'


Zu __FB_ARGC__: Kann es sein, dass die Variable nicht global (SHARED) definiert ist?
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 29.11.2009, 02:03    Titel: Antworten mit Zitat

In anderen Programmen habe ich die auch in Subs, und da läuft es...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 19.05.2010, 20:15    Titel: Antworten mit Zitat

Habe inzwischen bei einem anderen Programm auch dieses Problem. ARGV ist definiert, ARGC dagegen nicht. o_O ist das verbuggt...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
micha



Anmeldungsdatum: 09.12.2005
Beiträge: 72

BeitragVerfasst am: 20.05.2010, 00:38    Titel: Antworten mit Zitat

Sollte nur auf Modul-Ebene funktionieren also nicht in subs.

Micha
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 20.05.2010, 17:13    Titel: Antworten mit Zitat

Tja, warum ist dann aber ARGV definiert? Das ist sehr inkonsequent...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 20.05.2010, 17:23    Titel: Antworten mit Zitat

Ein Blick in die Referenz lohnt. Dort gibt es ein Bespiel, wie man das verwenden sollte.

ARGC ist ein Integerwert, ARGV ein Pointer auf einen ZString Ptr, also eigentlich wie in C auch, nur dass in C alles an ein Modul (nämlich 'main') übergeben werden muss, da es keinen Code außerhalb gibt.
Warum also soll FB da anders vorgehen als C.

Ein kleines Beispiel:
Code:
Declare Sub foo(argc As Integer = 0, argv As ZString Ptr Ptr = 0)

Print "Hauptprogramm:"
Print "ARGC: " & __FB_ARGC__
Print "ARGV: " & *__FB_ARGV__[0]
Print

foo(__FB_ARGC__, __FB_ARGV__)   'mit Übergabeparametern aufrufen
Print

foo                           'ohne Übergabeparametern aufrufen
Print

Sleep


Sub foo(argc As Integer = 0, argv As ZString Ptr Ptr = 0)
   If argc <> 0 And argv <> 0 Then
      Print WStr("Unterprogramm mit Übergabe:")
      Print "ARGC: " & argc
      Print "ARGV: " & *argv[0]
   Else
      Print WStr("Unterprogramm ohne Übergabe:")
      'Print "ARGC: " & __FB_ARGC__         'beide sind in der Sub nicht bekannt
      'Print "ARGV: " & *__FB_ARGV__[0]   'und müssen auskommentiert werden
   EndIf
End Sub


So wie ich das sehe sind ARGV und ARGC nicht global definiert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz