Compiler-Fehler Wieso muss bei Methode immer erst am Ende returned werden?

Bitte aktiviere JavaScript!
Um nochmal auf "zufällig" zurück zu kommen. Damit war gemeint, dass dieses Verhalten nicht durch die Sprache spezifiziert ist. Es ist dem Beispiel, dem Compiler und der Architektur geschuldet, dass das hier (zufällig) funktioniert.
 
Genau, das ist compilerspezifisch bzw ein Compiler-Detail - jedoch nicht sprach- oder ISO-spezifisch. Jedoch ging mihe7 einfach keck davon aus, das "immer" die in der Methode zuletzt beschriebene oder gelesene Variable returned wird insofern kein Return erreicht wurde. ;)
 
Jedoch ging mihe7 einfach keck davon aus, das "immer" die in der Methode zuletzt beschriebene oder gelesene Variable returned wird insofern kein Return erreicht wurde.
Nö, @mihe7 hat nichts von Variablen gesagt, hat damit auch nichts zu tun.

C:
#include<stdio.h>
 
int c() {
    int a = 5;
}


int b() {
    c();
}

int main(int argc, char *argv[]) {
    printf("%d\n",b());
}

Liefert mit -O0 0 und mit -O3 irgendeine beliebige Zahl, zB -301901784
 
Und ohne Dein seltsames O? Tu doch nicht so als läge ich falsch.
gleich mal vorweg: dumme Pöbeleien will ich hier nicht sehen...



-O setzt das Optimierungslevel des Compilers, Erklärungen findest du z.B. hier. Da ist nichts seltsam dran, das sind einfach nur Standardoptionen. -O0 ist Standard, das gleiche Ergebnis erhältst du ohne Angabe.

Ich muss auch nicht so tun als ob du falsch liegst, dass kannst du sowohl ausprobieren als auch einfach überprüfen, in dem du dir den generierten Code anguckst.
Beim ausprobieren wirst du sehen, dass es nicht die "zuletzt beschriebene oder gelesene Variable" ist, um Code wirst du sehen, das keine Variable einfach so in eax landet.
 
C:
#include<stdio.h>

int b() {
    asm("movl $125, %eax");
}

int main(int argc, char *argv[]) {
    printf("%d\n", b());
}
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben