Was ist für euch guter Programmcode?
-
Mecnels schrieb:
choose ("hour")(2,3);
Wie ich mir gedacht habe, fällt dazu keinem was ein, drum geb ich noch mal einen kleinen Tip: es hat etwas mit Funktionszeigern zu tun.
also tut mir leid, aber langsam machst du dich lächerlich. Du bist hier vermutlich der einzige im Thread, der die grundlegende C++ Syntax noch nicht so richtig drauf hat.
Aber diese Diskussion führt echt zu nix. Du bist zu alt
-
Mecnels schrieb:
Ein C++ Programm enthalte die folgende Anweisung:
choose ("hour") (2,3);
Das war's schon. Wie ist diese Codezeile zu verstehen - rein syntaktisch betrachtet?
Alltag bei mir, für Euch wahrscheinlich eine harte Nuss.
Ein kleiner Tip, es hat etwas mit Zeigern zu tun.
Schönen Tag noch.dafür gibt's 1000 möglichkeiten. zum beispiel
class FBase{ public: virtual int operator()(int,int){ throw "unknown function"; } }; class Hour:public FBase{ public: int operator()(int a,int b){ return a+b; } }; FBase& choose(string const& key){ static Hour hour; if(key=="hour") return hour; static FBase fbase; return fbase; } int main(){ int i=choose("hour")(2,3); cout<<i<<endl;
aber was hat das bitte mit zeigern zu tun?
außerdem hast du ausreichend oft gezeigt, daß du neicht gut coden kannst. diese kinkerlitzchen sind kein zeichen für gutes coden. sie sind halt grundlagen. in den ersten jahren ist man sogar stolz drauf. früher hab ich auch tief in templates gewühlt. hier was von 1997.
template<int P,int T=2> struct Prim { enum{v=Prim<(P%T==0)?0:((P>=T*T)?P:0),(P%T==0)?0:((P>=T*T)?T+1:P>2)>::v}; };
oder hier was von 1998
class DownLoop { private: int max; public: DownLoop(int _max) :max(_max) {}; template<class X,class E> void forEach(X &x,E e) { int i=max; while(--i>=0) { x.set(i); e(); }; }; }; void main() { DownLoop l(5); int summe=0; { Var<int> s(summe); Temp<int> x; l.forEach(x,assign(s,x+s)); }; cout<<summe<<'\n'; cout<<sizeof(Var<int>)<<'\n'; };
und heute mach ich das vor dem frühstück. aber das macht micht nicht stolz, sondern stolz macht es mich, wenn ich sachen lösen kann, ohne daß der code kompliziert wird. deswegen kriegste hier mit deinen argumenten auch keinen fuß auf den boden. weil du gar nicht weißt, um was es geht beim programmieren. wenn ich bei einer eitwas größeren funktion zu gregor sage "was ist denn hier passiert?" und er sagt "jo, hab ja auch ein schlechtes gewissen deswegen", dann ist das bereits ein gespräch, dem du offensichtlich nicht folgen kannst.
deine aussagen, was du alles könntest, werden dir hier von keinem geglaubt.
-
volkard schrieb:
Mecnels schrieb:
Ein C++ Programm enthalte die folgende Anweisung:
choose ("hour") (2,3);
Das war's schon. Wie ist diese Codezeile zu verstehen - rein syntaktisch betrachtet?
Alltag bei mir, für Euch wahrscheinlich eine harte Nuss.
Ein kleiner Tip, es hat etwas mit Zeigern zu tun.
Schönen Tag noch.dafür gibt's 1000 möglichkeiten.
Endlich hab ich Gewissheit, wo ihr steht, wenn nicht einmal die elementarsten Dinge klar sind. Es gibt nämlich nur eine einzige, eindeutige Interpretation (genauer: muss es geben - kein Compiler akzeptiert mehrdeutige Anweisungen, sind nämlich nicht übersetzbar), nämlich dass choose eine Funktion ist, die einen Zeiger auf eine andere Funktion zurückgibt. War aber auch tückisch gestellt, die Frage, also kann auch einem Haudegen wie Dir passieren, drauf rein zu fallen.
Ich bin immer wieder erstaunt, wie schnell Altersunterschiede polarisieren,
und damit das hier wieder zur Ruhe kommt, spiel ich ab jetzt nur mehr den Beobachter, ist auch amüsant genug.
-
ROFL schrieb:
Zu Linux: Tja, für die früheren Programmierer 1970-1995 war das selbstverständlich
Ich muss zugeben, dass ich nicht so der grosse Linux Kenner bin, aber wurde Linux nicht erst Anfang der 90er ins Leben gerufen?
ROFL schrieb:
Glaubst DU bei Windows war das schon immer so? Soundkarte rein, Plug'n Play und alles klappt? Das ist kein Verdienst der MS Programmierer, sondern der Hardware Industrie!
Natürlich. Ich frag mich nur, was die Hardware Hersteller ohne passende BS Schnittstelle machen. Ach was solls, die ist ja in ein paar Minuten gemacht.
ROFL schrieb:
Linux ist ein Unix und Unix == System für versierte Anwender
Mach nur weiter so, dann endet das hier in einem 50 Seiten langen Linsux vs. Windoof Thread.
Mecnels schrieb:
drum bin ich echt mal auf Beiträge von Euch gespannt (ich freu mich schon wenn ich irgendwo ein define sehe und dann darauf herumhacken kann, auch wenn ich keinen blassen Schimmer habe, welche Funktion es in einem gegebenen Programm hat).
Bei mir wirst du sowas nur in plattform- und build-abhängiger Verwendung finden, aber sicher nicht für Konstanten.
Mecnels schrieb:
drum geb ich noch mal einen kleinen Tip: es hat etwas mit Funktionszeigern zu tun
Dann tipp ich mal auf Shades letzten Vorschlag. choose ("hour") wählt aus einer Map mit Id "hour" einen Wert (Funktionszeiger). Diese Funktion wird mit den Parametern (2,3) aufgerufen?
Aber wie bereits gesagt wurde, dafür gibt verschiedene Möglichkeiten. Und ohne die Implementierung zu kennen, ist dieses Rätselraten absoluter Unsinn. Und um bei den kindischen Spielereien zu bleiben, das ist nicht mal 1337.
-
Mecnels schrieb:
kein Compiler akzeptiert mehrdeutige Anweisungen
Bist du so blöd, oder tust du nur so? Die Rede war nicht von einer mehrdeutigen Anweisung, sondern dass dies je nach Kontext mehrere verschiedene eindeutige Anweisungen sein können.
Und hör mal besser auf das, was volkard sagt. Was volkard sagt, hat Gewicht, denn er ist der Meister. Was du sagst, hat überhaupt kein Gewicht, weil du weder begründen kannst, noch hat mich dein Code überzeugt (ach, ich verstehe ich ja nur nicht), noch bist du ein langjähriges Mitglied so dass ich sagen kann "jo, was der sagt, kling eigentlich meistens sehr einleuchtend".
Nicht jeder wird im Alter so starrsinnig und uneinsichtig wie du, aber dir ist definitiv nicht mehr zu helfen. Du bist (grundlos) eingebildet ohne Ende ("Endlich hab ich Gewissheit, wo ihr steht, wenn nicht einmal die elementarsten Dinge klar sind.") und deine weltfremde Ignoranz ("Java ist tot") setzt dem nur die Krone auf.
-
Mecnels schrieb:
Endlich hab ich Gewissheit, wo ihr steht, wenn nicht einmal die elementarsten Dinge klar sind. Es gibt nämlich nur eine einzige, eindeutige Interpretation (genauer: muss es geben - kein Compiler akzeptiert mehrdeutige Anweisungen, sind nämlich nicht übersetzbar)
Nein, du verstehst nicht. Wie das ein Compiler interpretiert, hängt von der Implementierung ab. choose ("hour") kann genauso gut ein Objekt mit überladenem op() sein.
-
Mecnels schrieb:
volkard schrieb:
Mecnels schrieb:
Ein C++ Programm enthalte die folgende Anweisung:
choose ("hour") (2,3);
Das war's schon. Wie ist diese Codezeile zu verstehen - rein syntaktisch betrachtet?
Alltag bei mir, für Euch wahrscheinlich eine harte Nuss.
Ein kleiner Tip, es hat etwas mit Zeigern zu tun.
Schönen Tag noch.dafür gibt's 1000 möglichkeiten.
Endlich hab ich Gewissheit, wo ihr steht, wenn nicht einmal die elementarsten Dinge klar sind. Es gibt nämlich nur eine einzige, eindeutige Interpretation (genauer: muss es geben - kein Compiler akzeptiert mehrdeutige Anweisungen, sind nämlich nicht übersetzbar), nämlich dass choose eine Funktion ist, die einen Zeiger auf eine andere Funktion zurückgibt.
kk
Kannst du mir dann bitte verraten, warum volkards Beispiel dann funktioniert, obwohl es nix mit Funktionszeigern zu tun hat?
-
groovemaster schrieb:
ROFL schrieb:
Zu Linux: Tja, für die früheren Programmierer 1970-1995 war das selbstverständlich
Ich muss zugeben, dass ich nicht so der grosse Linux Kenner bin, aber wurde Linux nicht erst Anfang der 90er ins Leben gerufen?
Ja, gilt aber allgemein für Unices.
groovemaster schrieb:
ROFL schrieb:
Glaubst DU bei Windows war das schon immer so? Soundkarte rein, Plug'n Play und alles klappt? Das ist kein Verdienst der MS Programmierer, sondern der Hardware Industrie!
Natürlich. Ich frag mich nur, was die Hardware Hersteller ohne passende BS Schnittstelle machen. Ach was solls, die ist ja in ein paar Minuten gemacht.
Komisch, als ich damals meine Gamecard eingebaut hab, lief sie nicht. Nicht kompatibel zu Windows 3.1.
Falsch, der Hersteller liefert Treiber. Das Problem von Linux/BSD ist, daß die Hardware Hersteller keine Treiber schreiben. Schnittstellen hat so ziemlich jedes OS
-
guyondrugs schrieb:
Kannst du mir dann bitte verraten, warum volkards Beispiel dann funktioniert, obwohl es nix mit Funktionszeigern zu tun hat?
Der Compiler hat nen Bug. Ist doch ganz klar.
-
ROFL schrieb:
Komisch, als ich damals meine Gamecard eingebaut hab, lief sie nicht. Nicht kompatibel zu Windows 3.1.
LOL. Dir ist aber schon klar, dass Win 3.1 kein BS ist?
ROFL schrieb:
Falsch, der Hersteller liefert Treiber. Das Problem von Linux/BSD ist, daß die Hardware Hersteller keine Treiber schreiben. Schnittstellen hat so ziemlich jedes OS
Es ging mir aber nicht um die Treiber. Dass die vom Hersteller kommen ist schon klar. Nur nützt das nix, wenn du keine Schnittstelle zwischen Treiber und OS hast. Und sowas ist nicht etwas, was man mal so nebenbei für ein BS bereitstellt.
-
groovemaster schrieb:
Nur nützt das nix, wenn du keine Schnittstelle zwischen Treiber und OS hast. Und sowas ist nicht etwas, was man mal so nebenbei für ein BS bereitstellt.
äh, wie war das... wenn man keine Ahung hat, ...
-
Mecnels schrieb:
Endlich hab ich Gewissheit, wo ihr steht, wenn nicht einmal die elementarsten Dinge klar sind. Es gibt nämlich nur eine einzige, eindeutige Interpretation
Wenn du von C redest, hast du natürlich recht. Weil man dort den op() nicht überladen kann.
Aber in C++ ist das nicht der Fall, da kann man richtig kranke sachen machen.
zB wenn choose eine KLasse ist, dann erstellt choose() ein Objekt
ist choose eine Variable wird der op() aufgerufen
das sind 2 grundverschiedene sachen.(genauer: muss es geben - kein Compiler akzeptiert mehrdeutige Anweisungen, sind nämlich nicht übersetzbar),
Ich sagte ja auch: kontextabhängig.
Und C++ _ist_ kontext abhängig.denn niemand kann mir verraten was
foo();
macht.
wird eine funktion aufgerufen? wird der op() eine variablen foo aufgerufen oder ist foo eine Klasse, dann wird hier ein temporäres Objekt erstellt.weiters wird es kompliziert wenn der PP hier rein kommt, aber das lassen wir lieber, weil damit nichts mehr auch nur annährend vorhersehbar wäre.
nämlich dass choose eine Funktion ist, die einen Zeiger auf eine andere Funktion zurückgibt. War aber auch tückisch gestellt, die Frage, also kann auch einem Haudegen wie Dir passieren, drauf rein zu fallen.
Schau dir volkards Code an. In C++ ist es nicht eindeutig.
in C wüsste ich jetzt auf die schnelle auch keine situation wo etwas anderes als funktionszeiger möglich wären.Ich bin immer wieder erstaunt, wie schnell Altersunterschiede polarisieren,
und damit das hier wieder zur Ruhe kommt, spiel ich ab jetzt nur mehr den Beobachter, ist auch amüsant genug.Verstehe ich nicht. Was hat das alter damit zu tun? Es ist leicht zu beweisen dass der Code ohne kontext mehrdeutig ist, dass kann auch ein 10 jähriger
-
Optimizer schrieb:
guyondrugs schrieb:
Kannst du mir dann bitte verraten, warum volkards Beispiel dann funktioniert, obwohl es nix mit Funktionszeigern zu tun hat?
Der Compiler hat nen Bug. Ist doch ganz klar.
Nene, volkard hat das mit dem GCC kompiliert. Da dieser nicht von bestbezahlten Spitzenprogrammierern geschrieben wurde, kompiliert der alles.
-
#define doChoose(A,B) {int i,j;for(i=0;i<B;++i){for(j=0;j<A;++j) printf("%s ",str);printf("\n");}}} #define choose(STR) {char* str=STR;doChoose int main(){ choose("hour")(2,3);
ist nicht mehr so extrem sinnvoll, daß choose("hour")(2,3); ein 2x3 grid malt, wo in jedem feld "hour" steht. aber ist ohne c++.
-
@Optimizer
Tut mir leid wenn ich mich so einmische, aber studierst du nicht an der FH-München? Ich meine mal einen link von dir dazu gesehen zu haben.
Ich frage, weil ich zum nächsten ws auch gerne dort anfangen würde.
Wie ist es dort und was lernt man dort alles? Wie schwer ist das Studium? Ich mache demnächst mein Abi und möchte gerne in Bayern bleiben.
-
Das Studium ist ein bisschen anders, als ich mir das vorgestellt habe. Ich möchte nicht sagen schlecht. Aber wenn du mit der Erwartung reinkommst "jetzt voll was über Computer zu lernen", wirst du enttäuscht werden. Das musst du dir in der Freizeit selber beibringen.
Zumindest in den ersten Semestern ist es eher ein Mathematik-Studium, so Fächer wie Compilerbau und Software-Engineering klingen aber natürlich vielversprechend. Alles in allem habe ich jetzt gerade erst mein (99% Mathematik-) Grundstudium beendet, also kann ich dir dazu noch nicht so wirklich viel sagen.
-
Optimizer schrieb:
Das Studium ist ein bisschen anders, als ich mir das vorgestellt habe. Ich möchte nicht sagen schlecht. Aber wenn du mit der Erwartung reinkommst "jetzt voll was über Computer zu lernen", wirst du enttäuscht werden. Das musst du dir in der Freizeit selber beibringen.
Zumindest in den ersten Semestern ist es eher ein Mathematik-Studium, so Fächer wie Compilerbau und Software-Engineering klingen aber natürlich vielversprechend. Alles in allem habe ich jetzt gerade erst mein (99% Mathematik-) Grundstudium beendet, also kann ich dir dazu noch nicht so wirklich viel sagen.Ohh, ich dachte nur an einer Uni hat man soviel Mathe? Ich hab nur GK und damit auch noch einige Probleme...
Wir war Deine Vorbildung in Mathe?
-
@Mecnels: Danke, so köstlich habe ich mich seit einiger Zeit nicht mehr amüsiert.
-
MaSTaH schrieb:
@Mecnels: Danke, so köstlich habe ich mich seit einiger Zeit nicht mehr amüsiert.
Wenigstens ist meine Signatur etwas besser geworden.
-
wieder M. schrieb:
MaSTaH schrieb:
@Mecnels: Danke, so köstlich habe ich mich seit einiger Zeit nicht mehr amüsiert.
Wenigstens ist meine Signatur etwas besser geworden.
Wenn man nen lustigen Tag hat kann man sich über diesen Satz totlachen.
Aber wohl leider Fake, so kennen wir unseren Mecnels garnicht