-
Notifications
You must be signed in to change notification settings - Fork 4
Description
Wie in #1 (comment) beschrieben, muss die Reihenfolge der Funktionsdefinitionen im CBuilder beachtet werden.
Im generierten C-Code werden die Funktionen in der Reihenfolge definiert, wie sie im CBuilder hinzugefügt wurden. Da in C eine Funktion beim Aufruf aber bereits bekannt sein muss (oder zumindest die Deklaration), bedeutet dies, dass aktuell die Nutzer des CBuilders selbst dafür sorgen müssen, dass aufgerufene Funktionen vor den aufrufenden Funktionen im CBuilder definiert werden.
Beispiel aus #1 (comment):
def first():
second()
def second():
print("second")Hier muss der User selbst Sorge dafür tragen, dass im CBuilder zunächst die Funktion second() definiert wird und erst danach die Funktion first(). Anderenfalls wird beim Compilieren des generierten C-Codes eine Fehlermeldung durch den C-Compiler entstehen, dass die Funktion second() beim Aufruf in first() nicht definiert ist.
Ein erster Lösungsvorschlag wäre, in ProgramBuilder#buildProgram() die Schleife
Mini-Python-Builder/src/main/java/CBuilder/ProgramBuilder.java
Lines 141 to 144 in 902fd00
| for (Function f : globalFunctions) { | |
| program.append(f.buildFuncObjectDeclaration()); | |
| program.append(f.buildCFunction()); | |
| } |
program.append(f.buildFuncObjectDeclaration())), und in einer zweiten Schleife anschließend die Funktionsdefinitionen geschrieben werden (program.append(f.buildCFunction())).
Follow-Up zu #1