Skip to content

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

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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