C och C++ kompabilitet

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Oltronix
Inlägg: 408
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

C och C++ kompabilitet

Inlägg av Oltronix »

1. Kan man köra C och C++ i samma binär/laddmodul?
Om svaret är ja så är det inte så konstigt. Nu kommer nästa fråga:

2. Kan man i samma källkodsfil ha C-kod och C++ kod?
Jag har ett malloc-anrop i en C++ file. I min C++ bok, som jag tvingats införskaffa, finns inte ett pip om malloc-anrop.

Vilka kompilerings- och länkkommandon jag använder vet jag inte riktigt. Jag använder qmake och make. Det blir alltid häftiga Makefiler som är knepiga att tränga igenom för mig när qmake vart framme
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43150
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: C och C++ kompabilitet

Inlägg av sodjan »

http://www.cplusplus.com/reference/cstdlib/malloc/

> Kan man köra C och C++ i samma binär/laddmodul?

En "binär/laddmodul" innehåller ingen C eller C++ kod alls.
Den innehåller enbart maskinkod genererade av kompilatorerna.
Och om kompilatorerna genererar objektkod enligt samma mall
så borde de vara kompatibla och länkbara med varandra.

> Kan man i samma källkodsfil ha C-kod och C++ kod?

C är väl i princip en delmängd av C++.

Men det måste väl vara enkelt att slänga ihop ett par små
test-cases med det som du vill göra och se vad som händer...
Användarvisningsbild
swesysmgr
Inlägg: 14127
Blev medlem: 28 mars 2009, 06:56:43
Ort: Göteborg

Re: C och C++ kompabilitet

Inlägg av swesysmgr »

Oltronix skrev: 2. Kan man i samma källkodsfil ha C-kod och C++ kod?
Jag har ett malloc-anrop i en C++ file. I min C++ bok, som jag tvingats införskaffa, finns inte ett pip om malloc-anrop.
Det heter new i C++, brukar gå bra att blanda in C men du behöver antagligen sätta en flagga till kompilatorn och/eller något #pragma makro eller liknande som talar om för C++ kompilatorn att här kommer det standard C.

Vilken kompilator/miljö kör du med? Använder du en färdig utvecklingsmiljö då kommer den att lösa länkning m.m. åt dig om du har C och C++ filer i samma projekt.
datajompa
Inlägg: 232
Blev medlem: 5 november 2010, 10:35:54

Re: C och C++ kompabilitet

Inlägg av datajompa »

Oltronix skrev:Jag har ett malloc-anrop i en C++ file. I min C++ bok, som jag tvingats införskaffa, finns inte ett pip om malloc-anrop.
Blanda dem bara inte så är det ingen fara. Det som allokeras med new frigörs med delete, och malloc med free. Det kan finnas helt legitima skäl att använda malloc även i C++-program.
För övrigt så finns det ingen anledning att känna sig dum, det finns ingen som förstår make och dess varianter. Det är förmodligen som med Fermats stora sats, någon gång om 3-400 år så kommer någon extremt smart student plötsligt att knäcka gåtan efter att ett äpple råkat falla på hans huvud, men om man inte vill sluta som alla de andra som förgäves förlorat förståndet i sina försök att förstå det så är det bättre att bara skriva make, be en bön, och hoppas på det bästa.
Användarvisningsbild
hawkan
Inlägg: 2586
Blev medlem: 14 augusti 2011, 10:27:40

Re: C och C++ kompabilitet

Inlägg av hawkan »

Man får deklarera c-funktionen som extern "C" för att namnmanglingen ska bli rätt. För standardfunktioner som maööoc ska man inkludera rätt headerfil så görs det där. För övrigt hatar jag ipaddens tangentbord.
Findecanor
Inlägg: 982
Blev medlem: 2 juli 2010, 23:04:07

Re: C och C++ kompabilitet

Inlägg av Findecanor »

Det finns fortfarande lite i språket C som inte är laglig C++. Man får då lägga C och C++ - kod i olika källkodsfiler och kompilera dem till olika objektfiler som man sedan länkar ihop.
Men... eftersom C++ stödjer överlagring på funktionsparametrar och C inte gör det så går det bara att importera symboler från C till C++ men inte tvärtom. Därför måste man skriva sitt program i huvudsak C++, och man kan bara anropa C från C++. (med undantag för funktionspekare ... tror jag)

Man brukar deklarera C-funktioner i en headerfil som man inkluderar in i både C och C++ - källkod.
I header-filen skriver man innan deklarationerna:

Kod: Markera allt

#ifdef __cplusplus
extern "C" {
#endif
Och efter deklarationerna:

Kod: Markera allt

#ifdef __cplusplus
}
#endif
#ifdef:arna gör att C-kompilatorn hoppar över "extern "C" och måsvingarna.
Skriv svar