pure / const Funktionsattribute in verschiedenen Compilern

rei ist ein Funktionsattribut, das besagt, dass eine Funktion keinen globalen Speicher verändert.
const ist ein Funktionsattribut, das besagt, dass eine Funktion keinen globalen Speicher liest / ändert.

Mit diesen Informationen kann der Compiler einige zusätzliche Optimierungen vornehmen.

Beispiel für GCC:

float sigmoid(float x) __attribute__ ((const));

float calculate(float x, unsigned int C) {
    float sum = 0;
    for(unsigned int i = 0; i < C; ++i)
        sum += sigmoid(x);
    return sum;
}

float sigmoid(float x) { return 1.0f / (1.0f - exp(-x)); }

n diesem Beispiel könnte der Compiler die Funktion @ optimiereBerechnun bis:

float calculate(float x, unsigned int C) {
    float sum = 0;
    float temp = C ? sigmoid(x) : 0.0f;
    for(unsigned int i = 0; i < C; ++i)
        sum += temp;
    return sum;
}

Oder wenn dein Compiler klug genug ist (und nicht so streng in Bezug auf Floats):

float calculate(float x, unsigned int C) { return C ? sigmoid(x) * C : 0.0f; }

Wie kann ich eine Funktion für die verschiedenen Compiler, d. H. GCC, Clang, ICC, MSVC oder andere, so markieren?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage