Sida 1 av 1

C och C++ kompabilitet

Postat: 4 februari 2018, 20:32:37
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

Re: C och C++ kompabilitet

Postat: 4 februari 2018, 21:31:59
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...

Re: C och C++ kompabilitet

Postat: 4 februari 2018, 23:02:54
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.

Re: C och C++ kompabilitet

Postat: 4 februari 2018, 23:23:04
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.

Re: C och C++ kompabilitet

Postat: 5 februari 2018, 00:17:08
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.

Re: C och C++ kompabilitet

Postat: 5 februari 2018, 00:24:34
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.