skillnad mellan C och C++

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Att inte ASM kommit upp kan bero på att orginalfrågan lydde "Jag undrar vad skillnaden mellan att programmera i C++ och C är", men det är ju klart värt att nämna när man ska börja med uC.

Sedan förstod jag läraren som att han lärde ut för PC-programmering, men att petterp hade tänkt nyttjat den kursens lärdom till uC-programmering. Därav kan jag förstå att läraren pratade om fördelarna med C++, särskilt om man ska programmera för Windows.
Användarvisningsbild
petterp
Inlägg: 139
Blev medlem: 2 maj 2007, 21:30:39
Ort: Öland || Jönköping

Inlägg av petterp »

Jag nämde de att jag skulle andvända kunskaperna till µC men jag vill ha så stor nytta av dem som möjligt.

Läraren jag pratar med håller inte någon kurs (inte för tillfället iallafall). Men han har kunskap i ämnet hoppas jag ;)


Nu för tillfället har jag en bok som lär ut C++ på 3veckor och där påstår de att man ska helt glömma bort allt man har lärt sig i C.

Får fortsätta med C++ och "glömma" (när man programmerar) det överflödiga.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Jag gissar att dom syftar på *hur* man gör program i C man ska glömma, inte språket i sig eftersom det är väldigt likt. ;)
Rick81
Inlägg: 755
Blev medlem: 30 december 2005, 13:07:09

Inlägg av Rick81 »

Med risk för att vara tjatig säger jag:
Använd C för mikroprocessorer och C++ för windowsprogram.

De flesta C++ lärare har inte en aning om begränsningarna i en mikroprocessor och det är säkert därför han tycker du ska använda C++.

Man ska inte glömma C när man programmerar i C++ eftersom C++ är just C ++ (dvs C + 1). Det man skriver i C kan man flytta över direkt till C++, men inte omvänt.

Största skillnaden mellan C och C++ är just klasser. Men man kan struktera C kod som klasser i C++.

Till exempel:

Kod: Markera allt

C
I filen klass1.h:
// Definitioner
void Klass1_Init();
void Klass1_Main();

I filen klass1.c:
void Klass1_Init()
{
	// kod
}

void Klass1_Main()
{
	// kod
}

C++:
I filen Klass1.h:
class Klass1
{
	void Init();
	void Main();
}
I filen Klass1.cpp:
void Klass1::Init()
{
	// kod
}

void Klass1::Main()
{
	// kod
}
Så mitt tips: lär dig C++ och struktera sedan C koden som C++.
henkebenke
Inlägg: 521
Blev medlem: 31 maj 2003, 10:42:37
Ort: Helsingborg

Inlägg av henkebenke »

På jobb kör vi IARs Embedded C++ på M16C, 48-128k. Argumenten för C++ är många, argumentet mot är ett: större kod. Personligen skulle jag rekommendera alla som kör lite större projekt och har en vettig C++-kompilator för sin arkituktur att använda C++.

En C++-kompilator är striktare och gör att man undviker en hel del C-konstruktioner som kan generera problem (C och C++ är inte samma språk).
Objektorientering görs bäst i ett objektorienterat språk (eller ett språk som har stöd för det, C++ är inte strikt objektorienterat).
Vill du höja kvaliten på din C-kod, kör den genom en C++-kompilator.
Sen visade det sig att en 128k M16C28 var billigare än 96k-varianten pga att 128k gick i större volymer. Så det är inte alltid sant att utrymme kostar.

Sen kan det vara så att assembler har sin plats ett system så som C har sin och C++ har sin. Men att göra en avancerad tillståndsmaskin i assembler blir bara oläsligt och svårt att underhålla.

Men är man ny på mikrokontrollers så är det C som gäller, alternativt assembler om uppgiften är isolerad och begränsad.
bearing
Inlägg: 11677
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Inlägg av bearing »

Med tanke på att minnet (väl) allokeras dynamisk i C++ så måste (väl) variabler hanteras indirekt. Det tar mycket längre tid och kod än direkta varibler på en liten PIC.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Minnet allokeras inte dynamisk enbart för att det blir C++... men i C++ använder man ofta dynamiska komponenter vilket ger denna effekt.

Om man allokerar:
unsigned char Some_Buffer[10];
är det totalt likgiltigt om det är i C eller C++, det reserveras 10 bytes statisk.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Jag hade gärna sett lite längre utlägg kring vissa påståenden;

> En C++-kompilator är striktare och gör att man undviker en hel del C-konstruktioner som kan generera problem
Kan du ge något exempel?

> Vill du höja kvaliten på din C-kod, kör den genom en C++-kompilator.
Vad menar du här? Att den varnar för mer, eller att den optimerar koden bättre?
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Efter vad jag vet är allt som är "tillåtet" i C även "tillåtit" i C++.
Grymme
Inlägg: 1
Blev medlem: 27 november 2007, 20:26:12
Ort: Umeå

Inlägg av Grymme »

Visst går det att köra med C++ på µC men det beror helt på vad du tänkt göra för att veta om C++ är bästa valet. Dock har man som hobbyist inte alltid problemet med att man måste optimera så hårt och se till att välja rätt från början så det går nog bra vilket du än väljer.

Har precis avslutat ett projekt på en freescale powerpc 233mhz som vi gjorde majoriteten i C++. Ca 120k rader C++ och 20k rader C. Sedan en drös XML mm.

Det låter som du är hyffsat ny på µC och inte vill betala en massa för utvecklingsmiljöer och kompilatorer. Jag skulle råda dig att först testa assembler för att förstå vad tusan µCn pysslar med (klockcykler, register etc) Sedan köra C som det finns gott om information på nätet om. Gärna lära dig att koda de tids/minnes-kritiska delarna i ASM och göra programstrukturen i C.

Jag har kört ett C++ projekt på AVR med winavr och visst fungerar det. Nu är dock min personliga uppfattning att C++ är bra i stora projekt med lite mer minne att leka med och stor mängd kod att hålla koll på. En blandning av C och ASM är klockrent på µC.

Om du kör winavr så fixar du "Krets" och "Kristall" enkelt med MFile-verktyget som följer med. Kort kan sägas att dessa anges med variabler i makefilerna som du får ändra själv eller med verktyget. Det är även i makefilerna som du får ställa in C eller C++.

För övrigt så kan du ju även köra basic på µC.

Gör man ett litet projekt bara för kul så använd vad som verkar roligt. Det är en helt annan sak om du skall göra något seriöst som skall ut på marknaden, underhållas i 20 år och dessutom skall vara säkerhetsklassat.
Skriv svar