Programmiersparche

Mit C# ist die .NET Programmierung wesentlich erleichtert worden. So sind z.B. keine Typ-Umwandlungen mehr notwendig. Alle Datentypen werden nativ von den .NET Frameworks unterstützt.

Und durch den Wegfall der Mehrfach-Vererbung ist der Programmierer zu einem strikteren Klassen- und Objekt-Design gezwungen. Was die Objekt- und Klassenhierarchie wesentlich übersichtlicher macht.

Die Programmierung eines Betriebssystems ist in C# allerdings kaum sinnvoll, schon alleine aus Laufzeitgründen nicht. Und es gibt keinen nativ von der CPU ausführbaren Code mehr.
 
(Wenn ich mal etwas Halb-OT einbringen kann:)

Das verunsichert mich jetzt ein wenig ... ich habe im Studium nur mit Java zu tun und hobbymäßig nutze ich tatsächlich C#; auf der Arbeit dann C++ (allerdings in Kombination mit .NET weil gewünscht).
Was sind denn das für Aspekte z.B. in C#, die einem in ("real") C/C++ den Tach verhunzen können? :huh:
-> Jetzt bitte nicht als Kritik/Anstiftung verstehen, würde mich wirklich mal interessieren; und vielleicht könnte ich mich dann sofort etwas umgewöhnen ^^

Das fängt schon bei so trivialen Sachen an, wie Deklarierte Variablen, die VisualStudio immer mit 0 initialisiert. Wenn du aber nen anderen Compiler nimmst, dann ist das eben nicht so....

Es sind halt unzählige winzige Kleinigkeiten, die man sich erlauben kann. C ist da aber gnadenlos und dir fliegt alles um die Ohren, und bis du dann mal verstehst WARUM dass denn auf einmal so ist, wirst du sehr sehr sehr sehr sehr viel Zeit verbraten, einfach weil du NIE auf die Idee kommst, dass das plötzlich ein Problem sein könnte. Ist ja bisher auch immer gelaufen...

Das ist halt echt ein Problem, da absolut profan, und daher auch sehr schwer sich bewusst zu machen und daran etwas dauerhaft zu ändern.
 
Also ich hab bisher keine Probleme :D
Definitionen mach ich auch immer direkt, also kein
int myInt;
...
Wert von myInt holen
Nöp^^
Schlimmer ist es dann schon bei den Generika ... da hab ich selbst in Java mit Sachen Probleme bekommen, die in C# noch gingen
 
na der thread gefällt mir >< willst dein eigenes os bauen und kannst nichma hello world? ernsthaft - beschäftige dich erstma 4 5 jahre mit dem thema, bevor du auch nur an die grundzüge der os-programmierung denkst :ugly:
 
Nicht nur das, bevor du dich solchen Dingen widmest, solltest du auch Hintergrundwissen haben.
Beispiel:

Die 8080/8086 CPU ist eine von Neumann entwickelte Architektur, Sie arbeitet alles nacheinander ab,
es werden "Register" benutzt die von unterschiedlicher Größe sind.

Performance Beispiel

Eine Multiplikation benötigt 10ns
Eine Subtraktion benötigt 1ns

a*(b-c)

Gesamt = 21ns

Optimiere Gleichung A

gegeben: a*(b-c)

Lösung: a*b-a*c

Gesamt = 11ns

Außerdem solltest du Analytische Fähigkeiten besitzen/antrainieren und über gewisse Logik-Kenntnisse beherrschen ...

lg
 
Zuletzt bearbeitet:
Fang klein an, wenn du am Ball bleibst, schaffst du wahrscheinlich trotzdem kein OS xD, aber es schon vieles anderes nützlich drin, mach erstmal sowas wie "Hallo World", dann mal nen taschenrechner und sowas halt und dann holst du dir mal ein Board mit nen paar LED und nem LCD und arbeitest dich da rein, vielleicht macht dir sowas ja schon Spaß und du machst was sinnvolles damit, aufjedenfall versuch es einfach mal... und je nachdem wie alt du bist, machst du vielleicht eine Ausbildung in so einem Bereich oder ein Studium.
 
...Performance Beispiel

Eine Multiplikation benötigt 10ns
Eine Subtraktion benötigt 1ns

a*(b-c)

Gesamt = 21ns

Optimiere Gleichung A

gegeben: a*(b-c)

Lösung: a*b*a*c

Gesamt = 11ns

Außerdem solltest du Analytische Fähigkeiten besitzen/antrainieren und über gewisse Logik-Kenntnisse beherrschen ...

Bitte mal das Beispiel korrigieren.

Gleich 3 Fehler in 4 Zeilen ist eine Leistung.

Vielleicht kommst du selbst darauf.

Eine Multiplikation benötigt 10ns
Eine Subtraktion benötigt 1ns

a*(b-c)

Gesamt = 11 ns

Optimiere Gleichung A

gegeben: a*(b-c)

Lösung: a*b-a*c

Gesamt = 21 ns

Und eigentlich müsste es lauten:

Eine Multiplikation benötigt 10ns
Eine Subtraktion benötigt 1ns

a*b-a*c

Gesamt = 21 ns

Optimiere Gleichung A

gegeben: a*b-a*c

Lösung: a*(b-c)

Gesamt = 11 ns
 
Zuletzt bearbeitet:
kommt darauf an, was der compiler macht :P :lol:

ein -O0 oder -O3 ist da schon viel interessanter ;)

auch, ob es einen unterschied zwischen a*(b-c) und (b-c)*a gibt. (Normal nicht, der Compiler sollte daraus den gleichen Code machen

Es macht aber einen unterschied, ob ich (a+b)/2 mache, oder (a+b)*0.5 ;)
 
Ohh ja. Da hatte ich letzens auf StackOverflow auch wieder tolle Sachen gelesen, hat der Compiler von einem (Cpp) einfach cout(s) übersprungen. :D

Mir ist es mal bei Strings mit Leerzeichen in C++ passiert Beispiel:

String Antwort;

cout<<"Was war der xyz von xy ... ?"<<endl;
cin>>Antwort;

if(Antwort=="ASWD JKLÖ");
{
cout<<"Richtig ";
}
else{
cout<<"Falsch ";
}

Allerdings wird in C++ nicht mit equals(); wie in Java verglichen, wenn man ein Leerzeichen hat, kann es sein das man Probleme bekommt,
wenn man Sie nicht richtig auffüllt.

Das cout wird danach einfach übersprungen (richtig oder falsch).
 
hmm sollte eigentlich nicht passieren, da man beide überspringt. :ka:

Aber gibt schon SEHR viele SEHR "lustige" Fehler...

Ich portiere gerade nen Linux Kernel Modul (Treiber unter linux). Ich sag euch DAS ist ein "Spaß" :ugly:
 
Mir ist es mal bei Strings mit Leerzeichen in C++ passiert Beispiel:

String Antwort;

cout<<"Was war der xyz von xy ... ?"<<endl;
cin>>Antwort;

if(Antwort=="ASWD JKLÖ");
{
cout<<"Richtig ";
}
else{
cout<<"Falsch ";
}

Allerdings wird in C++ nicht mit equals(); wie in Java verglichen, wenn man ein Leerzeichen hat, kann es sein das man Probleme bekommt,
wenn man Sie nicht richtig auffüllt.

Das cout wird danach einfach übersprungen (richtig oder falsch).

Kein Wunder, da ist ein Semikolon zuviel hinter 'if(Antwort=="ASWD JKLÖ");', was einer leeren Anweisung entspricht, die im Wahrheitsfall ausgeführt wird.

Der Block danach sollte immer ausgeführt werden. Allerdings müsste der Compiler den else-Fall anmeckern.
 
Kein Wunder, da ist ein Semikolon zuviel hinter 'if(Antwort=="ASWD JKLÖ");', was einer leeren Anweisung entspricht, die im Wahrheitsfall ausgeführt wird.

Der Block danach sollte immer ausgeführt werden. Allerdings müsste der Compiler den else-Fall anmeckern.

Vertippt, aber im Skript ist es ohne Semikolon...

Probiers mal selbst aus!
Das funktiniert so trotzdem nicht
Ein Leerzeichen im String kann man so nicht schreiben, ich glaube man muss es auffüllen.

In Java gibt es eine equals(); funktion mit der es ohne Probleme funzt.
 
Zuletzt bearbeitet:
Ja, der Namespace ist std

Und ja, den Include zu string hab ich nicht vergessen.

Code:
#include<string>
using namespace std;

string x;
 
Zuletzt bearbeitet:
Zurück