
PowerBASIC: Beispiele und Erklärung
Reifegrad und Grenzen: Produktion
Umgesetzter Umfang: Hauptpfad für native Windows-x64-Programme; die geführten Beispiele decken Funktionen, Typen, Arrays, Strings, Kontrollfluss und PBXB64-Compile-Time-Formen ab.
Grenzen: Keine vollständige PB11-Kompatibilitätszusage; die Compile-Time-Erweiterungen sind begrenzt und V9 hat keine neue Gesamtfreigabe.
Unterstützte Befehle und Funktionen
Die vollständige thematische V23-BASIC-Referenz mit Syntaxfamilien, Help-Belegen und Abdeckungsgrenzen öffnen.
Referenz öffnenDer BASIC-Eingang verbindet PBMAIN, typisierte Variablen und strukturierte Anweisungen mit PBXB64-Erweiterungen. LONG ist in PBXB64 64 Bit breit.
Zwölf Kurzbeispiele und ein größeres Programm. Wählen Sie ein Thema oder arbeiten Sie die Beispiele der Reihe nach durch.
1. 1 + 2 + 3 + 4 + 5 = 15
Die Zahlen 1 bis 5 werden zu 15 addiert. Der Rückgabewert 15 wird als Prozess-Exitcode geprüft.
FUNCTION PBMAIN() AS LONG
LOCAL sum AS LONG
LOCAL i AS LONG
sum = 0
FOR i = 1 TO 5
sum = sum + i
NEXT
FUNCTION = sum ' = 15
END FUNCTIONErwarteter Exitcode: 15
PBXB64.exe sum15-powerbasic.pb -O2 -o example.exe .\example.exe $LASTEXITCODE
Nativ geprüft mit dem V22-Kandidaten vom 30.09.2026; Prüfung mit dem finalen Compiler noch ausstehend.
2. DO WHILE: Ergebnis im Programm prüfen
Die Schleife addiert 1, 2 und 3 zu 6. DO WHILE prüft vor jedem Durchlauf. Anschließend signalisiert Exitcode 1 einen falschen Wert; Exitcode 0 bedeutet, dass die interne Prüfung bestanden hat.
#COMPILE EXE
#DIM ALL
FUNCTION PBMAIN() AS LONG
LOCAL i AS LONG
LOCAL sum AS LONG
i = 1
sum = 0
DO WHILE i <= 3
sum = sum + i
i = i + 1
LOOP
IF sum <> 6 THEN FUNCTION = 1: EXIT FUNCTION
FUNCTION = 0
END FUNCTION
Erwarteter Exitcode: 0
PBXB64.exe test_do_while_counter.pb -O2 -o example.exe .\example.exe $LASTEXITCODE
Kanonischer Testfall mit erwartetem Ergebnis; hier keine neue native V22-Prüfung. Finale Ausführung noch ausstehend.
3. Präprozessor: Include, Makro und #REPEAT
web-defines.inc aktiviert den Prüfzweig. #REPEAT verarbeitet die Indizes 0, 1 und 2; beim dritten Durchlauf wird SELECTED als 40 definiert. ADD(SELECTED, 2) ergibt 42. Programm und Include müssen nebeneinander liegen.
#COMPILE EXE #DIM ALL #INCLUDE "web-defines.inc" #DEFINE ADD(left, right) = left + right #REPEAT 3 AS %INDEX #IF %INDEX = 2 #DEFINE SELECTED 40 #ENDIF #ENDREPEAT FUNCTION PBMAIN() AS LONG #IF ENABLE_WEB_CHECK = 1 IF ADD(SELECTED, 2) <> 42 THEN PBMAIN = 1 : EXIT FUNCTION #ELSE PBMAIN = 2 : EXIT FUNCTION #ENDIF PBMAIN = 0 END FUNCTION
Erwarteter Exitcode: 0
PBXB64.exe feature-preprocessor.pb -O2 -o example.exe .\example.exe $LASTEXITCODE
Nativ geprüft mit dem V22-Kandidaten vom 30.09.2026; Prüfung mit dem finalen Compiler noch ausstehend.
4. Einen Funktionswert zurückgeben
Ablauf Schritt für Schritt
- Foo weist dem Funktionsresultat 42 zu.
- main ruft Foo auf und übernimmt dessen Rückgabewert.
- FUNCTION = ist hier eine Resultatzuweisung, keine Ausgabeanweisung.
FUNCTION Foo() AS LONG
FUNCTION = 42
END FUNCTION
FUNCTION main() AS LONG
main = Foo()
END FUNCTION
Erwarteter Exitcode: 42
PBXB64.exe powerbasic-test_function_return.pb -O2 -o example.exe .\example.exe $LASTEXITCODE
Erwartung aus dem Quelltext abgeleitet; kein aktueller registrierter Laufvertrag. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.
5. Feste Stringfelder in einem Datentyp
Ablauf Schritt für Schritt
- TYPE definiert zwei STRING * 260-Felder für Dateinamen.
- Die lokale Variable opt enthält eine Instanz dieses Datentyps.
- SourceFile erhält test. Exitcode 0 prüft den Abschluss, nicht den Inhalt beider Felder.
TYPE LegacyCompilerOptions
SourceFile AS STRING * 260
OutputFile AS STRING * 260
END TYPE
FUNCTION main() AS LONG
LOCAL opt AS LegacyCompilerOptions
opt.SourceFile = "test"
main = 0
END FUNCTION
Erwarteter Exitcode: 0
PBXB64.exe powerbasic-test_fixed_string_type.pb -O2 -o example.exe .\example.exe $LASTEXITCODE
Erwartung aus dem Quelltext abgeleitet; kein aktueller registrierter Laufvertrag. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.
6. Abwärts zählen mit STEP -1
Ablauf Schritt für Schritt
- FOR beginnt bei 10 und schließt die Endgrenze 1 ein.
- STEP -1 verringert i in jedem Durchlauf; g sammelt die Werte.
- 10 + 9 + ... + 1 ergibt 55, den Rückgabewert des Programms.
FUNCTION PBMAIN() AS LONG
LOCAL g AS LONG
LOCAL i AS LONG
g = 0
FOR i = 10 TO 1 STEP -1
g = g + i
NEXT
FUNCTION = g
END FUNCTION
Erwarteter Exitcode: 55
PBXB64.exe powerbasic-for_int_negstep.pb -O2 -o example.exe .\example.exe $LASTEXITCODE
Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.
7. Verschachtelte FOR-Schleifen
Ablauf Schritt für Schritt
- Die äußere Schleife läuft dreimal von 1 bis 3.
- Für jeden äußeren Wert läuft die innere Schleife viermal von 1 bis 4.
- g wird genau 3 × 4 = 12 Mal erhöht.
FUNCTION PBMAIN() AS LONG
LOCAL g AS LONG
LOCAL i AS LONG
LOCAL j AS LONG
g = 0
FOR i = 1 TO 3
FOR j = 1 TO 4
g = g + 1
NEXT
NEXT
FUNCTION = g
END FUNCTION
Erwarteter Exitcode: 12
PBXB64.exe powerbasic-for_nested.pb -O2 -o example.exe .\example.exe $LASTEXITCODE
Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.
8. SELECT CASE für einen typisierten Wert
Ablauf Schritt für Schritt
- Der Parameter U01_TargetArch wird als LONG übergeben.
- SELECT CASE AS LONG wählt für den Aufruf mit 1 den ersten Zweig.
- Dieser Zweig liefert 0; CASE ELSE würde -1 liefern.
FUNCTION CX64_Main_Target_Init(BYVAL U01_TargetArch AS LONG) AS LONG
SELECT CASE AS LONG U01_TargetArch
CASE 1
FUNCTION = 0
CASE ELSE
FUNCTION = -1
END SELECT
END FUNCTION
FUNCTION main() AS LONG
main = CX64_Main_Target_Init(1)
END FUNCTION
Erwarteter Exitcode: 0
PBXB64.exe powerbasic-test_select_case_as_long.pb -O2 -o example.exe .\example.exe $LASTEXITCODE
Erwartung aus dem Quelltext abgeleitet; kein aktueller registrierter Laufvertrag. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.
9. EXIT FUNCTION überspringt spätere Anweisungen
Ablauf Schritt für Schritt
- Foo verlässt die Funktion bereits mit EXIT FUNCTION.
- Die nachfolgende Zuweisung FUNCTION = 99 wird nicht erreicht.
- Aus dem Quelltext wird der Standardrückgabewert 0 erwartet; dieser Fall ist hier noch nicht nativ geprüft.
FUNCTION Foo() AS LONG
EXIT FUNCTION
FUNCTION = 99
END FUNCTION
FUNCTION main() AS LONG
main = Foo()
END FUNCTION
Erwarteter Exitcode: 0
PBXB64.exe powerbasic-test_exit_function.pb -O2 -o example.exe .\example.exe $LASTEXITCODE
Erwartung aus dem Quelltext abgeleitet; kein aktueller registrierter Laufvertrag. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.
10. Array, Strukturkopie und typisierter Zeiger
Ablauf Schritt für Schritt
- values enthält zunächst 10 und 20; diese Werte werden in pair.left und pair.right kopiert.
- Der QUAD-Zeiger ändert anschließend values(0) zu 15 und nach p = p + 1 das nächste Element zu 21.
- Die kopierten Strukturfelder bleiben 10 und 20. Der abschließende Vergleich ist daher wahr.
TYPEDEF MyLong AS QUAD
TYPE Pair
left AS MyLong
right AS MyLong
END TYPE
FUNCTION PBMAIN() AS LONG
DIM values(3) AS MyLong
DIM p AS MyLong PTR
DIM pair AS Pair
values(0) = 10
values(1) = 20
pair.left = values(0)
pair.right = values(1)
p = VARPTR(values(0))
@p = @p + 5
p = p + 1
@p = @p + 1
IF pair.right > pair.left THEN
PBMAIN = 0
ELSE
PBMAIN = 1
END IF
END FUNCTION
Erwarteter Exitcode: 0
PBXB64.exe powerbasic-pointer_struct_array.pb -O2 -o example.exe .\example.exe $LASTEXITCODE
Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.
11. Unterschiedliche Werte in einem VARIANT-Array
Ablauf Schritt für Schritt
- Die Elemente enthalten einen Integer, einen String, einen DOUBLE, eine kopierte VARIANT und EMPTY.
- Typisierte Zugriffe lesen die Werte; VARIANTVT prüft die jeweiligen Laufzeit-Typkennungen.
- Für 3.125 verwendet der Test einen kleinen Vergleichsbereich. Exitcode 0 bedeutet, dass sämtliche Teilprüfungen erfüllt sind.
FUNCTION PBMAIN() AS LONG LOCAL v(5) AS VARIANT LOCAL r AS LONG r = 0 ' Integer element v(1) = 42 IF VARIANT%(v(1)) <> 42 THEN r = 1 IF VARIANTVT(v(1)) <> 20 THEN r = 2 ' String element v(2) = "hello" IF VARIANT$(v(2)) <> "hello" THEN r = 3 IF VARIANTVT(v(2)) <> 8 THEN r = 4 ' Float element via typed setter VARIANT#(v(3)) = 3.125 LOCAL d AS DOUBLE d = VARIANT#(v(3)) IF d < 3.124 OR d > 3.126 THEN r = 5 IF VARIANTVT(v(3)) <> 5 THEN r = 6 ' Variant-to-variant copy LOCAL src AS VARIANT src = 99 v(4) = src IF VARIANT%(v(4)) <> 99 THEN r = 7 ' EMPTY element v(5) = EMPTY IF VARIANTVT(v(5)) <> 0 THEN r = 8 IF ISEMPTY(v(5)) = 0 THEN r = 9 FUNCTION = r END FUNCTION
Erwarteter Exitcode: 0
PBXB64.exe powerbasic-test_variant_array.pb -O2 -o example.exe .\example.exe $LASTEXITCODE
Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.
12. Stringfunktionen mit Ergebnisprüfungen
Ablauf Schritt für Schritt
- Die Verkettung bildet Hello World; Groß-/Kleinschreibung und Trim-Funktionen werden getrennt geprüft.
- LEFT$, RIGHT$ und MID$ extrahieren Teiltexte; INSTR liefert hier die Positionen 7 beziehungsweise 5.
- ASC, CHR$, VAL, STR$, SPACE$ und STRING$ ergänzen Zeichen- und Zahlenkonvertierungen. Jeder abweichende Wert setzt einen Fehlercode.
FUNCTION PBMAIN() AS LONG
DIM a AS STRING = "Hello"
DIM b AS STRING = "World"
DIM c AS STRING
DIM err AS LONG = 0
c = a & " " & b
IF c <> "Hello World" THEN err = 1
IF UCASE$("abc") <> "ABC" THEN err = 2
IF LCASE$("XYZ") <> "xyz" THEN err = 3
IF TRIM$(" spaced ") <> "spaced" THEN err = 4
IF LTRIM$(" left") <> "left" THEN err = 5
IF RTRIM$("right ") <> "right" THEN err = 6
IF LEFT$("Hello", 2) <> "He" THEN err = 7
IF RIGHT$("Hello", 2) <> "lo" THEN err = 8
IF MID$("Hello", 2, 2) <> "el" THEN err = 9
IF INSTR("Hello World", "World") <> 7 THEN err = 10
IF INSTR(4, "Hello World", "o") <> 5 THEN err = 11
IF ASC("A") <> 65 THEN err = 12
IF CHR$(66) <> "B" THEN err = 13
IF VAL("42") <> 42.0 THEN err = 14
IF STR$(123.0) <> " 123" THEN err = 15
IF SPACE$(3) <> " " THEN err = 16
IF STRING$(3, 65) <> "AAA" THEN err = 17
PBMAIN = err
END FUNCTION
Erwarteter Exitcode: 0
PBXB64.exe powerbasic-string_ops.pb -O2 -o example.exe .\example.exe $LASTEXITCODE
Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.
Großes Beispiel: Drei typisierte Container zusammen verwenden
Ablauf Schritt für Schritt
- SSARR speichert alpha und beta; Zugriff über Get, At und den Index verändert das zweite Element zu gamma.
- WSARR zeigt entsprechende Stringzugriffe. DBARR speichert 1.25 und 2.5 und ersetzt den zweiten Wert durch 3.75.
- Fill 2, 4.5 setzt beide vorhandenen DBARR-Elemente auf 4.5. Count bleibt 2; Exitcodes 1 bis 9 zeigen eine fehlgeschlagene Teilprüfung an.
#COMPILE EXE #DIM ALL FUNCTION PBMAIN() AS LONG LOCAL sa AS SSARR LOCAL wa AS WSARR LOCAL da AS DBARR LOCAL s AS STRING LOCAL d AS DOUBLE LOCAL n AS QUAD sa.Push "alpha" sa.Add "beta" s = sa.Get(1) IF s <> "alpha" THEN FUNCTION = 1: EXIT FUNCTION s = sa.At(2) IF s <> "beta" THEN FUNCTION = 2: EXIT FUNCTION sa[2] = "gamma" s = sa[2] IF s <> "gamma" THEN FUNCTION = 3: EXIT FUNCTION wa.Push "wide" IF wa.Get(1) <> "wide" THEN FUNCTION = 4: EXIT FUNCTION wa[1] = "again" IF wa[1] <> "again" THEN FUNCTION = 5: EXIT FUNCTION da.Push 1.25## da.Add 2.5## d = da.Get(1) IF d <> 1.25## THEN FUNCTION = 6: EXIT FUNCTION da[2] = 3.75## d = da[2] IF d <> 3.75## THEN FUNCTION = 7: EXIT FUNCTION da.Fill 2, 4.5## d = da.Get(1) IF d <> 4.5## THEN FUNCTION = 8: EXIT FUNCTION n = da.Count IF n <> 2 THEN FUNCTION = 9: EXIT FUNCTION FUNCTION = 0 END FUNCTION
Erwarteter Exitcode: 0
PBXB64.exe powerbasic-HLib_Datatype_Arrays.pb -O2 -o example.exe .\example.exe $LASTEXITCODE
Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.
Alle Quellen dieser Lernseite
Jedes Beispiel hat einen eigenen Ordner; die README nennt die jeweiligen Compileraufrufe. Enthaltene Includes behalten ihre passenden Pfade.
Alle 13 Beispiele als ZIPBridging
BASIC kann native ASM-Symbole über BRIDGE IMPORT als gemeinsame Variable einbinden. Der ASM-Anbieter verwendet für LONG im Beispiel dq, also acht Bytes.
Vollständige Quellenpaare ansehen#REPEAT / %INDEX