c oder doch c++
-
Dravere schrieb:
Hacker schrieb:
Und würde es dann (wenn sie nicht verwendet werden können) syntaktisch Sinn machen, Code mit sowas vollzumüllen?
Wir sprechen hier von Unterschieden, nicht ob irgendwelche Sprachfeatures Sinn machen oder nicht. Sowas ist am Ende nämlich meistens von subjektiver Natur.
Nein, so meinte ich das nicht. Ich glaube, jeder wird mit mir übereinstimmen, dass folgendes "Feature" Schwachsinn wäre:
int foo(); int main() { foo("adf", 5, 7.45);//Man kann nichts mit den Übergabeparametern tun, sie aber trotzdem "übergeben" } int foo(){return 0;}In deinem Beispiel wird die Funktion im bezug auf ihre Parameter redefiniert, was nicht war wie ich es mir Vorstellte.

-
Hacker schrieb:
Nein, so meinte ich das nicht. Ich glaube, jeder wird mit mir übereinstimmen, dass folgendes "Feature" Schwachsinn wäre:
Nein, da wird dir nicht jeder zustimmen. Du denkst da ein wenig zu kurz.
Hacker schrieb:
In deinem Beispiel wird die Funktion im bezug auf ihre Parameter redefiniert, was nicht war wie ich es mir Vorstellte.
Deine Vorstellung ist da anderswo falsch. Ich mache keine Redefinition. Ich mache eine Definition und eine Deklaration. Deklaration und Definition sind in C, wie auch in C++, unterschiedliche Dinge.
Wieso du hier zu kurz denkst ist die folgende Situation:
Du kannst hier eine Deklaration haben, aber unterschiedliche Definitionen zum Beispiel für unterschiedliche Plattformen (also durch Makros unterschieden) wobei der Aufruf sich nicht verändert. Zumindest habe ich es so schon in der Verwendung gesehen. Ich finde das zwar auch nicht sehr prickelnd, aber das ist am Ende eben subjektiv.#include <stdio.h> void foo(); int main(void) { foo(10, 3.234, "hello"); return 0; } #ifdef BLUB_UNIX void foo(int x, double d) { printf("%d, %f", x, d); } #else void foo(int x, double d, char* str) { printf("%d, %f, %s", x, d, str); } #endifGrüssli
-
Dravere schrieb:
Ich mache keine Redefinition. Ich mache eine Definition und eine Deklaration.
Klar. War auch schlecht umschrieben, nur sind die Übergabeparameter der Deklaration und der Definition unterschiedlich, also...
Dravere schrieb:
Deklaration und Definition sind in C, wie auch in C++, unterschiedliche Dinge.
Das ist Selbstverständlich.
Dravere schrieb:
Du kannst hier eine Deklaration haben, aber unterschiedliche Definitionen zum Beispiel für unterschiedliche Plattformen (also durch Makros unterschieden) wobei der Aufruf sich nicht verändert. Zumindest habe ich es so schon in der Verwendung gesehen. Ich finde das zwar auch nicht sehr prickelnd, aber das ist am Ende eben subjektiv.
#include <stdio.h> void foo(); int main(void) { foo(10, 3.234, "hello"); return 0; } #ifdef BLUB_UNIX void foo(int x, double d) { printf("%d, %f", x, d); } #else void foo(int x, double d, char* str) { printf("%d, %f, %s", x, d, str); } #endifNun, ich verstehe nicht wieso man es nicht so macht:
#include <stdio.h> #ifdef BLUB_LINUX void foo(int, double); #else void foo(int, double, char*); #endif int main(void) { foo(10, 3.234, "hello"); return 0; } #ifdef BLUB_UNIX void foo(int x, double d) { printf("%d, %f", x, d); } #else void foo(int x, double d, char* str) { printf("%d, %f, %s", x, d, str); } #endif
-
Hacker schrieb:
Dravere schrieb:
Ich mache keine Redefinition. Ich mache eine Definition und eine Deklaration.
Klar. War auch schlecht umschrieben, nur sind die Übergabeparameter der Deklaration und der Definition unterschiedlich, also...
Also was? Das spielt keine Rolle.
Hacker schrieb:
Nun, ich verstehe nicht wieso man es nicht so macht:
Probier dein Code für
BLUB_UNIXzu kompilieren, nachdem du natürlich den Fehler korrigiert hast. Du hast nämlich einmalBLUB_LINUXund einmalBLUB_UNIX
Jedenfalls es kommt dann der folgende Fehler oder so ähnlich:
error: too many arguments to function 'foo'Grüssli
-
Edit: Einen weiter unten.
-
Dravere schrieb:
Jedenfalls es kommt dann der folgende Fehler oder so ähnlich:
error: too many arguments to function 'foo'Grüssli
Äh Nein? Es kommt kein Fehler, keine Warnung.
-
Hacker schrieb:
Du bist doof.
Verstehst du eigentlich wie peinlich das ist?
-
cooky451 schrieb:
Hacker schrieb:
Du bist doof.
Verstehst du eigentlich wie peinlich das ist?
Gut, gut. Schon weg. Nur, wieso postet er dann was nicht stimmt?
-
@Hacker,
Du willst mich auf den Arm nehmen? Wie wäre es, wenn du das Makro BLUB_UNIX definierst, wie ich es dir gesagt habe.Ich habe nur ein
#define BLUB_UNIXam Anfang eingefügt.
http://ideone.com/8yFtrAlso nochmals, wie war das mit dem "doof"?

Grüssli
-
Hacker schrieb:
Gut, gut. Schon weg. Nur, wieso postet er dann was nicht stimmt?
Ich meinte nicht das "du bist doof". Ich meinte die ganze Diskussion. Was soll das? Das Sprachmittel ist offensichtlich nicht das sinnvollste, sonst hätte C++ es nicht rausgeworfen. Aber gerade dass C++ es rausgeworfen hat ist doch Tatsache, und ich verstehe nicht, wie man diese Tatsache verschwinden lassen will. Dass du das Sprachmittel blöd findest ändert doch überhaupt nichts.
-
@Dravere: In der "doku", oder was auch immer sonst, muss erklärt werden, dass die Funktionen auf unterschiedlichen Betriebssystemen unterschiedlich deklariert (und definiert natürlich) werden.
Das mit dem doof stimmt schon irgendwie
:p , denn wieso sollte man überhaupt die Funktion auf verschiedenen Betriebssystemen unterschiedlich deklarieren und dann nur eine Anwendung kennen? Es muss doch (offensichtlich) einen Grund geben, wieso sie unterschiedlich ~ werden.
-
Also so langsam ...
Ich habe hier die Deklaration abgeändert, wie ich es weiter vorne schon gesagt hatte. Und es funktioniert hier mit
#define BLUB_UNIXund auch ohne:
http://ideone.com/jQNTb
http://ideone.com/2YfHZDie Deklaration ist auf allen Betriebsystemen die gleiche und nicht unterschiedlich! Der Aufruf ist überall gleich! Die Implementation ist anders, weil gewisse Parameter auf gewissen Betriebsysteme halt nicht benötigt werden. Aber wie gesagt, über Sinn und Unsinn von so einem Feature müssen wir hier gar nicht debattieren, weil es darum gar nicht geht!
*grosser Seufzer*

Grüssli