Seite 1 von 3

C-Standard gefolgt von Vermisstenmeldungen (Wirthi/Moritz)

Verfasst: Mi Jul 16, 2008 1:38 pm
von Kerli
Xin hat geschrieben:Warum nicht explizit angeben, wenn man nichts übergeben möchte?
Programmierer sind faul :D

Ich bin es halt anders gewohnt. Bei dir kommt das ws noch von C...
Xin hat geschrieben:Ich würde mich nicht drum streiten, ich kann auch gut ohne dieses void leben, aber grundsätzlich finde ich es nicht unangenehm.
Es sollte im Tutorial halt nur nach Möglichkeit einheitlich sein.

Re: c:logische_operatoren

Verfasst: Mi Jul 16, 2008 1:43 pm
von Xin
Xin hat geschrieben:Ich würde mich nicht drum streiten, ich kann auch gut ohne dieses void leben, aber grundsätzlich finde ich es nicht unangenehm.
Es sollte im Tutorial halt nur nach Möglichkeit einheitlich sein.[/quote]
Umfrage, Würfeln, oder soll ich mich einfach breitschlagen lassen?

Re: c:logische_operatoren

Verfasst: Mi Jul 16, 2008 1:48 pm
von nufan
Klar, der Standard legt keinen Rückgabetyp für selbstgeschriebene Funktionen fest. ^^
Standards...

Re: c:logische_operatoren

Verfasst: Mi Jul 16, 2008 1:58 pm
von Kerli
dani93 hat geschrieben:
Klar, der Standard legt keinen Rückgabetyp für selbstgeschriebene Funktionen fest. ^^
Standards...
Kann man da eventuell eine Ablehnung gegen Standards erkennen ;)

Aber stell dir einmal vor was wäre wenn es keinen Standard für C/C++ gäbe. Dann hätten wir sicherlich einmal einen Windowsstandard, einen Linuxstandard und ws noch ein paar andere. Und wie sollte man da noch für verschiedene Plattformen entwicckeln können, wenn es selbst jetzt mit einer standardisierten Sprache nicht unbedingt einfach ist...

Re: c:logische_operatoren

Verfasst: Mi Jul 16, 2008 4:21 pm
von fat-lobyte
dani93 hat geschrieben:
Klar, der Standard legt keinen Rückgabetyp für selbstgeschriebene Funktionen fest. ^^
Standards...
Hat da jemand was gegen Standards? :evil:

Hm, ich weiß ja nicht wies dir geht, aber hast du schon mal versucht dein Programm außerhalb von deinem Lieblingscompiler zu kompilieren?
Es gibt nämlich Leute, die bemühen sich ihre Programme ALLEN (auch den Windoofern) zur verfügung zu stellen, und möglichst viele Compiler zu unterstützen. Es ist schon _mit_ standards unheimlich Schwer alle Compiler zufrieden zu stellen, da doch jeder seine Macken hat.
Wie würde das ohne aussehen? Sollen etwa mehr #fidef's als echter Code im Source stehen? Oder bevorzugst du diese Variante:
main_msvc6.cpp
main_msvc8.cpp
main_msvc9.cpp
main_mingw295.cpp
main_mingw35.cpp
main_gcc295.cpp
main_gcc3x.cpp
main_gcc4x.cpp
main_intel.cpp
main_aix.cpp
....


Sorry, aber da musste ich jetzt ein bisschen Flamen. Man sollte die Arbeit der Working group, die den Standard entwickeln respektieren, denn sie ist nicht wenig.

Re: c:logische_operatoren

Verfasst: Mi Jul 16, 2008 4:31 pm
von nufan
fat-lobyte hat geschrieben: Sorry, aber da musste ich jetzt ein bisschen Flamen. Man sollte die Arbeit der Working group, die den Standard entwickeln respektieren, denn sie ist nicht wenig.
Ich hab ja nichts gegen Standards. Ich finde es bloß ein bisschen komisch, dass der Standard für main "int" vorschreibt, bei Unterprogrammen jedoch nicht. Klar, wenn man nen andern Typ brauchst nimmst man char, float usw, aber ich habe gedacht, wenn es keinen Rückgabewert gibt, verwendet man "int".

Re: c:logische_operatoren

Verfasst: Mi Jul 16, 2008 4:39 pm
von fat-lobyte
dani93 hat geschrieben:Ich hab ja nichts gegen Standards. Ich finde es bloß ein bisschen komisch, dass der Standard für main "int" vorschreibt, bei Unterprogrammen jedoch nicht. Klar, wenn man nen andern Typ brauchst nimmst man char, float usw, aber ich habe gedacht, wenn es keinen Rückgabewert gibt, verwendet man "int".
Ich glaub du verwechsest was. Das was du "Unterprogramm" nennst, sind in wirklichkeit funktionen. Wenn du einen Rückgabewert hast dann gibts du ihn zurück, und deklarierst die funktion mit dem richtigen typen.
Wenn nicht, ist er void.
Main ist auch nichts anderes als eine Funktion. Allerdings ist sie der Einstiegspunkt, und muss somit von jemandem Aufgerufen werden. Das wird vom Betriebssystem erledigt. Damit das Betriebssystem mit deiner main funktion kommunizieren kann, muss deine main funktion einem Vertrag folgen. Und dieser ist eben

Code: Alles auswählen

int main(int argc, char** argv)
Du darfst die Argumente weglassen, und auch das return statement (nur bei der main Funktion!), alles andere ist aber falsch.
Wieso manche glauben das es void ist, kommt vom (Ur)alten K&R C. Früher durfte man den typ des Parameters und der Funktion weglassen, dann wurde int angenommen. Kleines beispiel, was der gcc ohne warnungen schluckt:

Code: Alles auswählen

#include <stdio.h>

main(argc, argv)
    char** argv;

{
    register x;
    auto y;

    if (argc > 1)
            printf("Argument %s\n", argv[1]);

    x = 3;
    y = 6;

    printf ("%d + %d = %d\n", x, y, add(x, y));
        
    return 0;
}

add(a, b, unused)
{
    return a+b;
}

Vielleicht verstehst du jetzt, wieso standards so wichtig sind.

Re: c:logische_operatoren

Verfasst: Mi Jul 16, 2008 4:43 pm
von nufan
Vielleicht verstehst du jetzt, wieso standards so wichtig sind.
Alles klar.

Re: c:logische_operatoren

Verfasst: Mi Jul 16, 2008 5:09 pm
von Xin
fat-lobyte hat geschrieben:Main ist auch nichts anderes als eine Funktion. Allerdings ist sie der Einstiegspunkt, und muss somit von jemandem Aufgerufen werden. Das wird vom Betriebssystem erledigt. Damit das Betriebssystem mit deiner main funktion kommunizieren kann, muss deine main funktion einem Vertrag folgen. Und dieser ist eben

Code: Alles auswählen

int main(int argc, char** argv)
Du darfst die Argumente weglassen, und auch das return statement (nur bei der main Funktion!), alles andere ist aber falsch.
main muss dem Vertrag folgen, denn die Progammiersprache auferlegt.

Code: Alles auswählen

void main( void )
{
}
zu verbieten und dafür

Code: Alles auswählen

int main( void )
{
  // keine return Anweisung!
}
als richtig zu deklarieren, das ist definitiv nichts, wofür ein Standard-Kommitee in irgendeiner Form Respekt verdient hätte.

Re: c:logische_operatoren

Verfasst: Do Jul 17, 2008 1:02 pm
von Dirty Oerti
Standards sind meiner Ansicht nach (zumindest bei dem Thema hier) nicht wirklich von Nutzen.
Wer schlau ist, und sein Programm kompatibel zu anderen Compilern bzw Betriebssystemen oder Prozessoren machen will, der schafft das auch ohne Standard, denn er/sie ist ja schlau.
Teilweise würde ich so ein Komitee fast als ABM, Arbeitsbeschaffungsmaßnahme ansehen, aber man will ja nicht zu drastisch sein :)

Und programmiert man in einer Gruppe oder schreibt, wie hier, ein gemeinsames Tutorial, dann kann man sich ja untereinander auf einen "Standard" einigen, der den Anforderungen gerecht wird.

MfG
Daniel :)