Skip to content

Funktionen: Forwärts-Deklaration vor Aufruf notwendig #2

@cagix

Description

@cagix

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

for (Function f : globalFunctions) {
program.append(f.buildFuncObjectDeclaration());
program.append(f.buildCFunction());
}
aufzuteilen: Zunächst müssten alle Funktionen deklariert werden (program.append(f.buildFuncObjectDeclaration())), und in einer zweiten Schleife anschließend die Funktionsdefinitionen geschrieben werden (program.append(f.buildCFunction())).

Follow-Up zu #1

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions