Funktionsglobale Variablen

Jeder weiß: Globale Variablen sind böse. Mir fiel jetzt auf, dass viele funktionsglobale Variablen, also Variablen, die zu Beginn einer Funktion deklariert werden, nutzen. Diese sind dann nicht im jeweiligen Scope, sondern von überall in der Funktion änderbar.

Ist dies bei Programmiersprachen wie Pascal so üblich, sollte man überlegen, ob solche Konstrukte wirklich sinnvoll sind:

#include <stdio.h>

int do_something() {
    int a;
    int b;

    if (1 == 1) {
        a = 3;
        b = 4;
        return a + b;
    }

    return 0;
}

oder man lieber im Scope bleibt (der Einfachheit wurde jetzt auf Konstanten usw. verzichtet):

#include <stdio.h>

int do_something() {
    if (1 == 1) {
        int a = 3;
        int b = 4;
        return a + b;
    }

    return 0;
}

Das kann natürlich zu ähnlichen Problemen und Seiteneffekten führen, wie globale Variablen. Es ist also möglich, den Wert von funktionsglobalen Variablen an jeder Stelle im Code zu überschreiben, was fehleranfällig ist und das Debugging schwieriger macht.

Go und C++ bieten mittlerweile auch Konstrukte, in denen bereits im If-Kontrollstrukturheader Variablen deklariert und definiert werden können, die für die gesamte If-Kontrollstruktur funktionieren:

if (auto x = obj.methode(); x == 3) { ... }

Ich würde dringend empfehlen, auf funktionsglobale Variablen zu verzichten.

Ein weiteres Problem innerhalb verschiedener Programmiersprachen wie C ist, dass viele dann Variablen keinen Initialwert zuordnen. Es sollte also nicht so aussehen:

int a;

sondern besser:

int a = 0;

Dies vermindert Fehler und Debugging unter Umständen erheblich.

Redmine 5.1 auf FreeBSD

Obwohl es bereits Redmine 6.0.1 zum jetzigen Zeitpunkt gibt, haben wir unter FreeBSD bisher leider „nur“ Version 5.1 zur Verfügung. Allerdings gab es auch eine ganze Weile lang keine lauffähige Redmine-Version für FreeBSD in den Packages und Ports.

Ich habe Version 5.1 testweise in einer VM installiert und es funktionierte problemlos. Letztlich kann man nach dieser Anleitung vorgehen:

Ich freue mich darüber, dass es funktioniert und wir Redmine weiterhin unter FreeBSD nutzen können und hoffe, dass es bald auch eine aktuellere Version gibt.