return -Zahl in C

bmw4ever29

Schraubenverwechsler(in)
Hallo erstmal

Ich muss für die uni ein C Programm schreiben, welches bei einem Fehlerfall im "int main()" als rüchgabewert "returnvalue -4" zurückgeben soll.
Ich hab bereits versucht "return -4;" zu verwenden, aber dann wird ~4260000 zurückgegeben. Vielleicht kann mir mal einer von euch helfen, ich wär euch sehr dankbar

MfG
 
Gib mal den kompletten Code!
Den habe ich gerade nochmal im Visual Studio als Consolenanwendung getestet und er gibt -4 zurück
int main()
{
int i;
i = 0;
for (i = 0; i <= 10; i++)
{
if (i = 8)
return -4;
}
return 0;
}
 
Leider hängt das von der Plattform ab. Unter Linux sind beispielsweise nur returns zwischen 0 und 255 (8 Bit) möglich. Wenn du also return -4 in der main() machst, liefert dir ein "echo $?" nach Ausführung des Programms "252" als return Code. Die -4 werden quasi in den Wertebereich [0, 255] konvertiert.
 
Funktioniert bei mir unter Mint 17.3 ebenfalls problemlos.

Code:
#include <stdio.h>

int give_back(){
    int return_value = -4;
    return return_value;
}

int main(){
    printf("%i", giveback());
    
    return 0;
}

Leider hängt das von der Plattform ab. Unter Linux sind beispielsweise nur returns zwischen 0 und 255 (8 Bit) möglich. Wenn du also return -4 in der main() machst, liefert dir ein "echo $?" nach Ausführung des Programms "252" als return Code. Die -4 werden quasi in den Wertebereich [0, 255] konvertiert.

Das trifft aber nur auf unsigend ints zu. Ansonsten gibt Linux einen 8bit integer im Wertebereich von -128 bis 127 aus. --> https://de.wikipedia.org/wiki/Integer_(Datentyp)

Edit:
So habs jetzt in meiner ganzen Linux-Armee getestet. Arch, Kali2.0, Ubuntu14.04 & 15.10 und Mint 17.3. Geben mir alle -4 zurück.
Womit kompilierst du? Kannst du mit gdb umgehen?

MFG
 
Zuletzt bearbeitet:
@ xActionx: Es geht explizit um den Rückgabewert von main(), nicht von einer beliebigen Funktion.

macht keinen unterschied welche Methode den Wert zurückgibt... Wenn du das ganze umstellst kommt bei mir übrigens ebenfalls -4 raus. Gerade durch den Debugger laufen lassen.

Integer-Funktion bleibt Integer-Funktion main() behandelt einen Integer ja nicht anders als 'int beliebige_methode()'

MFG
 
Zuletzt bearbeitet:
Also, ich habe es gerade mal getestet:

Code:
#include <stdio.h>

int main (void) {

 return -4;
}

Danach:

Code:
heinrich@lenovo-t410:~/test123$ gcc retVal.c
heinrich@lenovo-t410:~/test123$ ./a.out ; echo $?
252
heinrich@lenovo-t410:~/test123$

Es ist echt komisch...
 
Integer-Funktion bleibt Integer-Funktion main() behandelt einen Integer ja nicht anders als 'int beliebige_methode()'
Es geht darum, welchen Wert dein Programm nach seiner Beendigung zurückgibt und da Spielt eben auch das OS eine Rolle. Insofern macht es sehr wohl einen Unterschied, ob es sich um main() handelt oder nicht. Nichts für ungut, aber zumindest die bisherigen Beiträge könntest du sorgsam lesen, wenn es dir schon an Erfahrung mangelt.

Es ist echt komisch...
Ganz und gar nicht. Siehe den Beitrag von bingo88: http://extreme.pcgameshardware.de/programmierung-und-webdesign/418452-return-zahl-c-post7891936.html
 
Also, ich habe es gerade mal getestet:

Code:
#include <stdio.h>

int main (void) {

 return -4;
}

Danach:

Code:
heinrich@lenovo-t410:~/test123$ gcc retVal.c
heinrich@lenovo-t410:~/test123$ ./a.out ; echo $?
252
heinrich@lenovo-t410:~/test123$

Es ist echt komisch...

Habe genau das gleiche Programm nur ohne void in der Main-Methode und bekomme mit diesem Aufruf -4 zurück. :\

Es geht darum, welchen Wert dein Programm nach seiner Beendigung zurückgibt und da Spielt eben auch das OS eine Rolle. Insofern macht es sehr wohl einen Unterschied, ob es sich um main() handelt oder nicht. Nichts für ungut, aber zumindest die bisherigen Beiträge könntest du sorgsam lesen, wenn es dir schon an Erfahrung mangelt.

Wie willst du bitte beurteilen, dass es mir an Erfahrung mangelt? Du kennst weder mich noch meinen Programmierstil.

Ich kann nichts dafür dass mein OS mir -4 zurück gibt und somit main() gleich behandelt wie alle anderen Methoden.

Muss jedoch anmerken, dass es mir unter Ubuntu 7.04 ebenfalls 252 zurück gibt.
 
Naja, nicht desto trotz ist es Schwachsinn. Wenn ich in der main() eine -4 zurückgebe, dann will ich in der Bash auch eine -4 bekommen und nicht eine 256-4..
 
Habe genau das gleiche Programm nur ohne void in der Main-Methode und bekomme mit diesem Aufruf -4 zurück. :\

Und jetzt schau genauer Dein Programm und mein Programm an... Dein give_back() ist ein "Thema verfehlt", genau so wie printf(...). Es geht um Dein "return 0;" bzw. meinen "return -4"... LESEN!
 
Und jetzt schau genauer Dein Programm und mein Programm an... Dein give_back() ist ein "Thema verfehlt", genau so wie printf(...). Es geht um Dein "return 0;" bzw. meinen "return -4"... LESEN!

Wie gesagt auch mit dem exakt selben Aufruf aus deiner Main-Methode erhalte ich -4 und nich 252, zumindest bei einigen neueren Linux-Distros. Habe ich aber schon im vorherigen Post beschrieben... LESEN!

BTW: Es gilt Doppelposts zu vermeiden.

MFG
 
Nochmal, Du hast es nicht geblickt um was es geht Kollege :) Dein Programm hat mit der gestellten Fragestellung NICHTS zu tun.
 
Nochmal, Du hast es nicht geblickt um was es geht Kollege :) Dein Programm hat mit der gestellten Fragestellung NICHTS zu tun.

Was für ein Zufall, habe nämlich inzwischen schon drei mal das gleiche Programm wie du benutzt...

Code:
#include <iostream>

int main(){
return -4;
}

und dann der Aufruf

Code:
./return ; echo $?

Komm mir schon blöd vor das nun ein drittes mal zu wiederholen, aber ich bekomme hier -4 zurück und nicht 252.
Dass das vorherige Programm theroetisch ein anderes Ergebnis liefern kann ist mir bewusst, verdeutlicht jetzt aber nochmal, dass ich trotzdem das gleiche zurück bekomme egal welche Methode ich aufrufe.

MFG
 
Zuletzt bearbeitet:
In Unixartigen Systemen, wird der Rückgabewert eines Programmes als ein unsigned 8 bit Wert dargestellt. Das heißt, sollte man eine negative Zahl in der main Funktion zurückgeben, dann hat das zur Folge, dass das zweier Komplement der Zahl verwendet wird. Da aber nur positive Zahlen verwendet werden, wird ein negativer Rückgabewert in der main Funktion anders von der Shell interpretiert. Wird z.B die -1 zurückgeben, dann erhält man in so einem Fall die 255.

Ich hoffe das hat euch etwas Klarheit verschafft. ;-)

Gruß Muletto
 
@Zeiss: Ich glaube nicht, dass das jedem hier so klar ist. :-)
Ob das schwachsinnig ist, kann jeder für sich selbst beurteilen. Nur in den meisten sollten die 256 Rückgabewerte an das OS, dem Programmierer sicher reichen.
 
Ich meine dieses "Umwandlung" ist ziemlich schwachsinnig. Ich meine, wenn ich -1 returne, dann will ich doch auch -1 erhalten. Die 256 Rückgabewerte sind ja schon okay.
 
Zurück