"Den it-student som läst Cobol under sin högskoleutbildning kan räkna med väsentligt högre
ingångslön på första jobbet. Det handla om ända upp mot 50 000 kronor mer per år, jämfört
med andra it-studenter som inte pluggat Cobol, enligt den amerikanske systemvetarprofessorn
Leon Kappelman på Unversity of North Texas."
Jag har ingen uppfattning om hurvida det stämmer eller inte.
Och det behöver så klart inte motsäga att det är "utdöende"...
MiaM skrev:Det finns en rätt stor skillnad som kan vara viktig när man pysslar med hårdvarunära saker.
I C är programflödet alltid helt givet. Programmet börjar med första kodraden i funktionen main().
I C++ så körs konstruktorer till diverse klasser innan första raden i main() körs, åtminstone ifall main() använder några klasser.
Det kan leda till problem, på viss hårdvara måste man kanske göra vissa uppstartgrejer i viss ordning.
Jag är osäker men man kanske kan komma runt det genom att ha en main() som är skriven mer eller mindre som vanlig C, och som i sin tur anropar "main2()" som nyttjar C++-saker.
Det finns säkert nån slags specar på i vilken ordning saker görs i C++, men det känns ändå lite lagom osäkert.
Allmänt vad gäller att komma åt hårdvaran så är det väl i övrigt ingen större skillnad. I båda språken kan man tilldela en pekare adressen till hårdvara och med lite kunskap om hur kompilatorn är gjord så kan man pilla på minnesmappad hårdvara direkt. I/O-mappad hårdvara (som på t.ex. x86 och dess föregångare 8080, 8085, Z80 o.s.v.) kräver funktioner i libbar (eller egna assemblersnuttar). Olika kompilatorer är olika lämpliga/olämpliga. Man vill ju ofta vara säker på att det bara görs en access mot I/O-adressen och man vill ju också ofta vara säker på att den sker med önskad bredd (d.v.s. t.ex. 8 bitar). Volatile-deklarering hjälper men C-standarden kräver inte att det faktiskt ska fungera.
Fast det finns ju knappast någon C-kompilatorer för mikrokontroller och andra småprocessorer som inte har stöd för att pilla på hårdvaran direkt.
Det var ju dessutom rätt vanligt även på "vanliga" kompilatorer på den tiden man körde OS där programmen förväntades pilla direkt på hårdvaran, t.ex. på den gamla onda MS-DOS-tiden.
Du får nog studera c++ lite. Ingen kod exekveras i osync som du beskriver (så länge du inte använder trådar). c++ har en main precis som c.
Även om C++ har en main() så måste de klasser som är globalt deklarerade skapas innan main kan börja köras.
Även vanlig C har ju en del initiering innan main() anropas (t.ex. kopieras väl alla const från programminne till arbetsminne, variabler initieras om de har ett startvärde etc). Jag vet att när jag jämförde C och Assembler på en ATTiny så såg jag den initieringsbiten, där ingick såvitt jag minns även att nollställa ett register (det användes som noll-konstant i all kod).