Der BASIC-Eingang verbindet PBMAIN, typisierte Variablen und strukturierte Anweisungen mit PBXB64-Erweiterungen. LONG ist in PBXB64 64 Bit breit.
Der BASIC-Eingang verbindet PBMAIN, typisierte Variablen und strukturierte Anweisungen mit PBXB64-Erweiterungen. LONG ist in PBXB64 64 Bit breit. Grafik in voller Größe öffnen

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.

Zur PBXB64-V9-Übersicht English

Unterstützte Befehle und Funktionen

Die vollständige thematische V23-BASIC-Referenz mit Syntaxfamilien, Help-Belegen und Abdeckungsgrenzen öffnen.

Referenz öffnen

Der 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 FUNCTION

Erwarteter Exitcode: 15

PBXB64.exe sum15-powerbasic.pb -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

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

Quelltext herunterladen

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

Programm und Include als ZIP

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

  1. Foo weist dem Funktionsresultat 42 zu.
  2. main ruft Foo auf und übernimmt dessen Rückgabewert.
  3. 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

Quelltext herunterladen

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

  1. TYPE definiert zwei STRING * 260-Felder für Dateinamen.
  2. Die lokale Variable opt enthält eine Instanz dieses Datentyps.
  3. 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

Quelltext herunterladen

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

  1. FOR beginnt bei 10 und schließt die Endgrenze 1 ein.
  2. STEP -1 verringert i in jedem Durchlauf; g sammelt die Werte.
  3. 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

Quelltext herunterladen

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

  1. Die äußere Schleife läuft dreimal von 1 bis 3.
  2. Für jeden äußeren Wert läuft die innere Schleife viermal von 1 bis 4.
  3. 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

Quelltext herunterladen

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

  1. Der Parameter U01_TargetArch wird als LONG übergeben.
  2. SELECT CASE AS LONG wählt für den Aufruf mit 1 den ersten Zweig.
  3. 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

Quelltext herunterladen

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

  1. Foo verlässt die Funktion bereits mit EXIT FUNCTION.
  2. Die nachfolgende Zuweisung FUNCTION = 99 wird nicht erreicht.
  3. 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

Quelltext herunterladen

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

  1. values enthält zunächst 10 und 20; diese Werte werden in pair.left und pair.right kopiert.
  2. Der QUAD-Zeiger ändert anschließend values(0) zu 15 und nach p = p + 1 das nächste Element zu 21.
  3. 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

Quelltext herunterladen

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

  1. Die Elemente enthalten einen Integer, einen String, einen DOUBLE, eine kopierte VARIANT und EMPTY.
  2. Typisierte Zugriffe lesen die Werte; VARIANTVT prüft die jeweiligen Laufzeit-Typkennungen.
  3. 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

Quelltext herunterladen

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

  1. Die Verkettung bildet Hello World; Groß-/Kleinschreibung und Trim-Funktionen werden getrennt geprüft.
  2. LEFT$, RIGHT$ und MID$ extrahieren Teiltexte; INSTR liefert hier die Positionen 7 beziehungsweise 5.
  3. 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

Quelltext herunterladen

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

  1. SSARR speichert alpha und beta; Zugriff über Get, At und den Index verändert das zweite Element zu gamma.
  2. WSARR zeigt entsprechende Stringzugriffe. DBARR speichert 1.25 und 2.5 und ersetzt den zweiten Wert durch 3.75.
  3. 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

Quelltext herunterladen

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 ZIP

Bridging

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