| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen   | 
	
	
	
		| Autor | 
		Nachricht | 
	
	
		28398
 
 
  Anmeldungsdatum: 25.04.2008 Beiträge: 1917
 
  | 
		
			
				 Verfasst am: 27.11.2009, 20:47    Titel: __FB_ARGC__ gibts nicht mehr? o_O | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 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 | 
		 | 
	
	
		  | 
	
	
		nemored
 
  
  Anmeldungsdatum: 22.02.2007 Beiträge: 4713 Wohnort: ~/
  | 
		
			
				 Verfasst am: 28.11.2009, 16:24    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				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 | 
		 | 
	
	
		  | 
	
	
		28398
 
 
  Anmeldungsdatum: 25.04.2008 Beiträge: 1917
 
  | 
		
			
				 Verfasst am: 28.11.2009, 17:15    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				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 | 
		 | 
	
	
		  | 
	
	
		nemored
 
  
  Anmeldungsdatum: 22.02.2007 Beiträge: 4713 Wohnort: ~/
  | 
		
			
				 Verfasst am: 28.11.2009, 22:36    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 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 | 
		 | 
	
	
		  | 
	
	
		28398
 
 
  Anmeldungsdatum: 25.04.2008 Beiträge: 1917
 
  | 
		
			
				 Verfasst am: 29.11.2009, 01:03    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				| In anderen Programmen habe ich die auch in Subs, und da läuft es... | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		28398
 
 
  Anmeldungsdatum: 25.04.2008 Beiträge: 1917
 
  | 
		
			
				 Verfasst am: 19.05.2010, 19:15    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				| Habe inzwischen bei einem anderen Programm auch dieses Problem. ARGV ist definiert, ARGC dagegen nicht. o_O ist das verbuggt... | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		micha
 
 
  Anmeldungsdatum: 09.12.2005 Beiträge: 72
 
  | 
		
			
				 Verfasst am: 19.05.2010, 23:38    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Sollte nur auf Modul-Ebene funktionieren also nicht in subs.
 
 
Micha | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		28398
 
 
  Anmeldungsdatum: 25.04.2008 Beiträge: 1917
 
  | 
		
			
				 Verfasst am: 20.05.2010, 16:13    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				| Tja, warum ist dann aber ARGV definiert? Das ist sehr inkonsequent... | 
			 
		  | 
	
	
		| Nach oben | 
		 | 
	
	
		  | 
	
	
		MOD Fleißiger Referenzredakteur
  
  Anmeldungsdatum: 10.09.2007 Beiträge: 1003
 
  | 
		
			
				 Verfasst am: 20.05.2010, 16:23    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				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 | 
		 | 
	
	
		  | 
	
	
		 |