Problem mit Update von PB6.20-win-x86 auf PB6.21-win-x86
Problem mit Update von PB6.20-win-x86 auf PB6.21-win-x86
Hallo,
ich wollte heute PB auf 6.21 (win, x86) hochziehen.
Beim Kompilieren mehrerer lauffähiger Projekte erhalte ich bei großen If-Schleifen mit mehreren ElseIf-Zweigen
Fehler in der Form "Zeile xyz: Unfinished splitted line". Mit PB 6.20 gibt es diese Fehlermeldung nicht.
Kann das noch jemand bestätigen?
Bug?
Neue Restriktion?
Leider ist der Code sehr umfangreich, um ihn hier zu posten. Das Kleinste Projekt besteht aus über 160'000 Zeilen.
// Moved from "Bugs" to "Allgemein" (Kiffi)
ich wollte heute PB auf 6.21 (win, x86) hochziehen.
Beim Kompilieren mehrerer lauffähiger Projekte erhalte ich bei großen If-Schleifen mit mehreren ElseIf-Zweigen
Fehler in der Form "Zeile xyz: Unfinished splitted line". Mit PB 6.20 gibt es diese Fehlermeldung nicht.
Kann das noch jemand bestätigen?
Bug?
Neue Restriktion?
Leider ist der Code sehr umfangreich, um ihn hier zu posten. Das Kleinste Projekt besteht aus über 160'000 Zeilen.
// Moved from "Bugs" to "Allgemein" (Kiffi)
Never change a running system - Never run a changed system!
(PB 6.20 LTS [x86])
(PB 6.20 LTS [x86])
Re: Problem mit Update von PB6.20-win-x86 auf PB6.21-win-x86
Code: Alles auswählen
Define a.i, b.i, c.i, d.i
Define s1.s
If a And
a And
(b Or
b Or
(c And c)) And
((a And
Not b And
Not b And
((c < 1000000 And d) Or
(c < 1000000 And d) Or
(Len(s1) < 8 And d) Or
(Len(s1) < 10 And d) Or
(a = 1 And Len(s1) < 12) Or
(a = 1 And Len(s1) >= 12 And Not b) Or
(a = 2 And Len(s1) < 5) Or
(a = 2 And Len(s1) >= 5 And Not b) Or
(a = 3 And Len(s1) < 5) Or
(a = 3 And Len(s1) >= 5 And Not b) Or
a = 0 Or
(100 < 1 And d) Or
(100 < 1 And d))) Or
; noch mehr Bedingungen blablabla
(Not a And
(a Or b) And
(a = 1 And Len(s1) < 12) Or
(a = 1 And Len(s1) >= 12 And Not a) Or
(a = 2 And Len(s1) < 5) Or
(a = 2 And Len(s1) >= 5 And Not a) Or
(a = 3 And Len(s1) < 5) Or
(a = 3 And Len(s1) >= 5 And Not a) Or
a = 0))
Debug 0815
EndIf
Ob die Abfrage Sinn ergibt oder nicht ist hier NICHT das Thema.
Syntaktisch ist die IF-Schleife korrekt und sollte keinen Fehler erzeugen.
Never change a running system - Never run a changed system!
(PB 6.20 LTS [x86])
(PB 6.20 LTS [x86])
Re: Problem mit Update von PB6.20-win-x86 auf PB6.21-win-x86
mir ist aufgefallen, wenn man das Feature mit den Parametern über mehrere Zeilen nutzt, dürfen seit 6.21 keine leerzeilen mehr dazwischen sein.
und in 6.20 ging noch
aber ob das jetzt ein Bug oder ein Feature darstellen soll.... wer weiss es 
Code: Alles auswählen
OpenWindow(1,
0,
0,
640, ..... usw
Code: Alles auswählen
OpenWindow(1,
0,
0,
640, ..... usw

PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: Problem mit Update von PB6.20-win-x86 auf PB6.21-win-x86
Danke für den Workaround!
In der Tat sind die Leerzeilen INNERHALB einer Bedingung das Problem..!
Funktioniert:
Funktioniert NICHT:
Auch Kommentare sind nicht mehr zulässig:
Das ist ein herber Rückschritt im Bezug auf Lesbarkeit und Dokumentierung und m.M.n. eindeutig ein Bug.
In der Tat sind die Leerzeilen INNERHALB einer Bedingung das Problem..!
Funktioniert:
Code: Alles auswählen
Define a.i, b.i, c.i, d.i
Define s1.s
If a And
a And
(b Or
b Or
(c And c)) And
((a And
Not b And
Not b And
((c < 1000000 And d) Or
(c < 1000000 And d) Or
(Len(s1) < 8 And d) Or
(Len(s1) < 10 And d) Or
(a = 1 And Len(s1) < 12) Or
(a = 1 And Len(s1) >= 12 And Not b) Or
(a = 2 And Len(s1) < 5) Or
(a = 2 And Len(s1) >= 5 And Not b) Or
(a = 3 And Len(s1) < 5) Or
(a = 3 And Len(s1) >= 5 And Not b) Or
a = 0 Or
(100 < 1 And d) Or
(100 < 1 And d))) Or
(Not a And
(a Or b) And
(a = 1 And Len(s1) < 12) Or
(a = 1 And Len(s1) >= 12 And Not a) Or
(a = 2 And Len(s1) < 5) Or
(a = 2 And Len(s1) >= 5 And Not a) Or
(a = 3 And Len(s1) < 5) Or
(a = 3 And Len(s1) >= 5 And Not a) Or
a = 0))
ElseIf a And
b And
c
Debug 0815
EndIf
Code: Alles auswählen
Define a.i, b.i, c.i, d.i
Define s1.s
If a And
a And
(b Or
b Or
(c And c)) And
((a And
Not b And
Not b And
((c < 1000000 And d) Or
(c < 1000000 And d) Or
(Len(s1) < 8 And d) Or
(Len(s1) < 10 And d) Or
(a = 1 And Len(s1) < 12) Or
(a = 1 And Len(s1) >= 12 And Not b) Or
(a = 2 And Len(s1) < 5) Or
(a = 2 And Len(s1) >= 5 And Not b) Or
(a = 3 And Len(s1) < 5) Or
(a = 3 And Len(s1) >= 5 And Not b) Or
a = 0 Or
(100 < 1 And d) Or
(100 < 1 And d))) Or
(Not a And
(a Or b) And
(a = 1 And Len(s1) < 12) Or
(a = 1 And Len(s1) >= 12 And Not a) Or
(a = 2 And Len(s1) < 5) Or
(a = 2 And Len(s1) >= 5 And Not a) Or
(a = 3 And Len(s1) < 5) Or
(a = 3 And Len(s1) >= 5 And Not a) Or
a = 0))
ElseIf a And
b And
c
Debug 0815
EndIf
Code: Alles auswählen
Define a.i, b.i, c.i, d.i
Define s1.s
If a And
a And
(b Or
b Or
(c And c)) And
((a And
Not b And
Not b And
((c < 1000000 And d) Or
(c < 1000000 And d) Or
(Len(s1) < 8 And d) Or
(Len(s1) < 10 And d) Or
(a = 1 And Len(s1) < 12) Or
(a = 1 And Len(s1) >= 12 And Not b) Or
(a = 2 And Len(s1) < 5) Or
(a = 2 And Len(s1) >= 5 And Not b) Or
(a = 3 And Len(s1) < 5) Or
(a = 3 And Len(s1) >= 5 And Not b) Or
a = 0 Or
(100 < 1 And d) Or
(100 < 1 And d))) Or
(Not a And
(a Or b) And
(a = 1 And Len(s1) < 12) Or
(a = 1 And Len(s1) >= 12 And Not a) Or
(a = 2 And Len(s1) < 5) Or
(a = 2 And Len(s1) >= 5 And Not a) Or
(a = 3 And Len(s1) < 5) Or
(a = 3 And Len(s1) >= 5 And Not a) Or
a = 0))
ElseIf a And
b And
; Kommentar
c
Debug 0815
EndIf
Never change a running system - Never run a changed system!
(PB 6.20 LTS [x86])
(PB 6.20 LTS [x86])
Re: Problem mit Update von PB6.20-win-x86 auf PB6.21-win-x86
Nein, es ist kein Bug, sondern wurde absichtlich geändert wegen dieses Problems:
Interesting compiler behavior with line continuation
(auch wenn man diese Änderung schlecht findet, macht es sie noch nicht zum Bug)
Vor PB 6.21 hat der Compiler bei solche Ausdrücken nicht gemeckert und man ging davon aus, dass alles ok sei:
Stattdessen aber hatte man im Code ein "+" zu viel in Zeile 5, was dazu führte, dass der Ausgabe eine "1" vom Resultat von OpenConsole() angehängt wurde:
Interesting compiler behavior with line continuation
(auch wenn man diese Änderung schlecht findet, macht es sie noch nicht zum Bug)
Vor PB 6.21 hat der Compiler bei solche Ausdrücken nicht gemeckert und man ging davon aus, dass alles ok sei:
Code: Alles auswählen
Define String.s
Define String.s
; String Erstellen
String = "Erste Zeile des Strings " +
"Zweite Zeile des Strings " +
; Console Öffnen
OpenConsole()
PrintN(String)
Input()
Daher müssen Zeilenfortsetzungen nun ohne Leerzeilen/Kommentare sein.Erste Zeile des Strings Zweite Zeile des Strings 1
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Problem mit Update von PB6.20-win-x86 auf PB6.21-win-x86
Das ist ansichtssache und könnte so auch gewollt sein.
In dem Fall wäre eine Option sinnvoller gewesen, als harte Änderung. Finde ich absolut nicht gut..
In meinem Fall habe ich nun jede Mende Arbeit und das Problem, dass ich wichtige Kommentare entfernen muss.
Diese Entscheidung ist nicht durchdacht und ein eindeutiger Schnellschuss. Damit werden etliche Codes nicht mehr lauffähig sein.
In dem Fall wäre eine Option sinnvoller gewesen, als harte Änderung. Finde ich absolut nicht gut..

In meinem Fall habe ich nun jede Mende Arbeit und das Problem, dass ich wichtige Kommentare entfernen muss.
Diese Entscheidung ist nicht durchdacht und ein eindeutiger Schnellschuss. Damit werden etliche Codes nicht mehr lauffähig sein.
Never change a running system - Never run a changed system!
(PB 6.20 LTS [x86])
(PB 6.20 LTS [x86])
Re: Problem mit Update von PB6.20-win-x86 auf PB6.21-win-x86
Ich kann dein Frust nachvollziehen. Ein früheres Update, wonach die einfachen Anführungszeichen nur noch ein Zeichen beinhalten dürfen, hatte meine Code auch kaputt gemacht. Damals musste ich aus 'ABC' z.B. 'A'<<32+'B'<<16+'C' machen.techniker hat geschrieben: 13.08.2025 17:20 Das ist ansichtssache und könnte so auch gewollt sein.
In dem Fall wäre eine Option sinnvoller gewesen, als harte Änderung. Finde ich absolut nicht gut..![]()
In meinem Fall habe ich nun jede Mende Arbeit und das Problem, dass ich wichtige Kommentare entfernen muss.
Diese Entscheidung ist nicht durchdacht und ein eindeutiger Schnellschuss. Damit werden etliche Codes nicht mehr lauffähig sein.
Allerdings war ich damals wohl der einzige der das nutzte.
Genauso ist es in deinem Fall. Ich habe bis zu deine Post noch nie einen Code gesehen, der seine Zeilenfortsetzung derart strukturieren wollte (mit Leerzeilen oder gar Kommentaren).
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- HeX0R
- Beiträge: 3042
- Registriert: 10.09.2004 09:59
- Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3 - Kontaktdaten:
Re: Problem mit Update von PB6.20-win-x86 auf PB6.21-win-x86
Nein, andere (ich) haben darüber aber eher im Stillen geschimpftSTARGÅTE hat geschrieben: 13.08.2025 17:39 Ich kann dein Frust nachvollziehen. Ein früheres Update, wonach die einfachen Anführungszeichen nur noch ein Zeichen beinhalten dürfen, hatte meine Code auch kaputt gemacht. Damals musste ich aus 'ABC' z.B. 'A'<<32+'B'<<16+'C' machen.
Allerdings war ich damals wohl der einzige der das nutzte.

{Home}.:|:.{Codes}.:|:.{Downloads}.:|:.{History Viewer Online}.:|:.{Bier spendieren}
Re: Problem mit Update von PB6.20-win-x86 auf PB6.21-win-x86
Bei einem Programm habe ich eine sehr komplexe Fallentscheidung aus If/Elseif. Es werden insgesamt 52 Variablen geprüft - wobei immer nur bis zu etwa 20 Variablen auf einmal. Diese haben unterschiedliche Wertigkeit - je nach Kombination (darum ElseIf) und ergeben 37 Fälle. Wobei mehrere Variablen-Kombinationen den gl. Fall ergeben können. Die If-Schleife ist somit um die 800 Zeilen lang.
Wie soll man eine solche Monster-Abfrage ohne Kommentare dokumentieren, so dass man nach ein paar Wochen immer noch durchblickt?
Wie soll man eine solche Monster-Abfrage ohne Kommentare dokumentieren, so dass man nach ein paar Wochen immer noch durchblickt?
Never change a running system - Never run a changed system!
(PB 6.20 LTS [x86])
(PB 6.20 LTS [x86])
Re: Problem mit Update von PB6.20-win-x86 auf PB6.21-win-x86
Du meinst, deine Abfrage für das If ist selbst schon 800 Zeilen (mit Umbrüchen) lang? Das das der Compiler überhaupt mitmacht.techniker hat geschrieben: 13.08.2025 20:05 Bei einem Programm habe ich eine sehr komplexe Fallentscheidung aus If/Elseif. Es werden insgesamt 52 Variablen geprüft - wobei immer nur bis zu etwa 20 Variablen auf einmal. Diese haben unterschiedliche Wertigkeit - je nach Kombination (darum ElseIf) und ergeben 37 Fälle. Wobei mehrere Variablen-Kombinationen den gl. Fall ergeben können. Die If-Schleife ist somit um die 800 Zeilen lang.
Wie soll man eine solche Monster-Abfrage ohne Kommentare dokumentieren, so dass man nach ein paar Wochen immer noch durchblickt?
Wäre es bei sowas nicht besser mit Prozeduren zu arbeiten, die die einzelnen Blöcke der And- und Or-Abfragen Strukturieren?
Code: Alles auswählen
If Check_Main()
Code: Alles auswählen
ProcedureReturn Bool( Check_Sub1() And ( Check_Sub2() Or Check_Sub2() ) )
Da du dein Code ja für ein Versionsupdate vermutlich eh umschreiben musst, wäre das eine Überlegung wert.
Zudem lassen sich die Unterprozeduren viel leichter Debuggen. Bei deiner Monster-If-Abfrage hast du doch keine Chance dort irgendwo mal zu gucken/checken, welcher And/Or-Fall-Pfad als "Wahr" ausgewertet wurde, weil der Debugger es ja als eine Zeile erkennt?
PS: if-schleife.de
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr