Buggfix Plus
Aktuellt datum och tid: 11.45 2018-06-24

Alla tidsangivelser är UTC + 1 timme




Svara på tråd  [ 6 inlägg ] 
Författare Meddelande
 Inläggsrubrik: C och C++ kompabilitet
InläggPostat: 20.32 2018-02-04 
Användarvisningsbild

Blev medlem: 21.24 2011-12-10
Inlägg: 245
Ort: Nynäs
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


Upp
 Profil  
 
 Inläggsrubrik: Re: C och C++ kompabilitet
InläggPostat: 21.31 2018-02-04 
EF Sponsor
Användarvisningsbild

Blev medlem: 15.29 2005-05-10
Inlägg: 36418
Ort: Söderköping
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...


Upp
 Profil  
 
 Inläggsrubrik: Re: C och C++ kompabilitet
InläggPostat: 23.02 2018-02-04 
Användarvisningsbild

Blev medlem: 06.56 2009-03-28
Inlägg: 6406
Ort: Göteborg
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.


Upp
 Profil  
 
 Inläggsrubrik: Re: C och C++ kompabilitet
InläggPostat: 23.23 2018-02-04 

Blev medlem: 10.35 2010-11-05
Inlägg: 222
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.


Upp
 Profil  
 
 Inläggsrubrik: Re: C och C++ kompabilitet
InläggPostat: 00.17 2018-02-05 
Användarvisningsbild

Blev medlem: 09.27 2011-08-14
Inlägg: 1075
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.


Upp
 Profil  
 
 Inläggsrubrik: Re: C och C++ kompabilitet
InläggPostat: 00.24 2018-02-05 

Blev medlem: 22.04 2010-07-02
Inlägg: 449
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: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. #ifdef __cplusplus
  2. extern "C" {
  3. #endif
  4.  

Och efter deklarationerna:
Kod: [Expandera/Minimera] [Hämta] (Untitled.txt)
  1. #ifdef __cplusplus
  2. }
  3. #endif
  4.  

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


Upp
 Profil  
 
Visa inlägg nyare än:  Sortera efter  
Svara på tråd  [ 6 inlägg ] 

Alla tidsangivelser är UTC + 1 timme


Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 1 gäst


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
    Agstu.se
Drivs av phpBB® Forum Software © phpBB Group
Swedish translation by Peetra & phpBB Sweden © 2006-2010