/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
.cpp og .c
Fra : Troels Thomsen


Dato : 03-05-02 20:22

MS VC++ 6 :

Kan jeg angive en #define eller en compiler/linker switch så jeg kan
inkludere en .c fil i et mfc projekt ??
(som indeholder noget c++ )

mvh Troels



 
 
Mogens Hansen (03-05-2002)
Kommentar
Fra : Mogens Hansen


Dato : 03-05-02 22:11


"Troels Thomsen" <troels.thom4sen@stofanet.dk>

>
> Kan jeg angive en #define eller en compiler/linker switch så jeg kan
> inkludere en .c fil i et mfc projekt ??

Så vidt jeg husker, kan du bare tilføje filen til projektet.

Venlig hilsen

Mogens Hansen



Troels Thomsen (04-05-2002)
Kommentar
Fra : Troels Thomsen


Dato : 04-05-02 09:05

> >
> > Kan jeg angive en #define eller en compiler/linker switch så jeg kan
> > inkludere en .c fil i et mfc projekt ??
>
> Så vidt jeg husker, kan du bare tilføje filen til projektet.
>

Hvis jeg renamer den til .cpp kompilerer og linker det uden fejl.
Som .c brokker den sig.
(Damn, jeg har ikke lige msvc installeret hér. Hvis ikke der er én der
svarer i mellemtiden, vender jeg tilbage med en mere præcis fejlbesked
mandag.)

Filen er fra et eksisterende projekt til en embedded processor hvor alle
filerne altså hedder .c uanset hvad de indeholder (c/c++). Jeg vil gerne
opnå at kunne trække filen ud af versionsstyringsprogrammet og kompilere,
uden at skulle rename den først.

mvh
Troels




Thomas Lykkeberg (05-05-2002)
Kommentar
Fra : Thomas Lykkeberg


Dato : 05-05-02 15:30

On Sat, 4 May 2002 10:04:51 +0200, "Troels Thomsen"
<troels.thom4sen@stofanet.dk> wrote:

>> >
>> > Kan jeg angive en #define eller en compiler/linker switch så jeg kan
>> > inkludere en .c fil i et mfc projekt ??
>>
>> Så vidt jeg husker, kan du bare tilføje filen til projektet.
>>
>
>Hvis jeg renamer den til .cpp kompilerer og linker det uden fejl.
>Som .c brokker den sig.
Det er fordi C og C++ ikke er det samme rent syntax mæssigt. C++
kompileren bruger f.eks namemangeling så man kan have flere funktioner
med samme navn, det lader sig ikke rigtig gøre i C.

Der må være en "fejl" i koden så den ikke er 100% portable til MSVC's
C kompiler.

Det bliver spændende at se hvad problemet er (på Mandag).

/Thomas

Mogens Hansen (05-05-2002)
Kommentar
Fra : Mogens Hansen


Dato : 05-05-02 18:47


"Troels Thomsen" <troels.thom4sen@stofanet.dk> wrote
> > >
> > > Kan jeg angive en #define eller en compiler/linker switch så jeg kan
> > > inkludere en .c fil i et mfc projekt ??
> >
> > Så vidt jeg husker, kan du bare tilføje filen til projektet.
> >
>
> Hvis jeg renamer den til .cpp kompilerer og linker det uden fejl.
> Som .c brokker den sig.

Ja, det kan jeg godt forestille mig.
Du er givetvis ude for typesafe linkage og namemangling.

I C++ enkoder kompileren funktionens argumenter ind i det navn som linkeren
får at vide at funktionen hedder (namemangling).
I C kender linkeren en funktion ved (stort set) samme navn som vi mennesker.

Når du inkluderer en header-file i en C++ fil, tror compileren at _alt_ er
C++, og vil derfor fortælle linkeren at den skal finde en funktion med det
manglede navn. Hvis funktionen så er implementeret i en C fil, kan linkeren
ikke finde en funktion med det forventede (manglede) navn, og man vil få en
linker fejl.

Løsninger er at fortælle C++ compileren, at der er tale om en C funktion.
Det gøres med extern "C".

Den bedste løsning, er at ændre i header-filen til C filen, så den både er
compatibel med C og med C++:

<C header file>
#ifdef __cplusplus
extern "C" {
#endif

// what ever

#ifdef __cplusplus
} // end of extern "C"
#endif
</C header file>

Hvis det ikke er tilladeligt at ændre headerfilen, kan man alle steder man
includerer den i en C++ fil skrive:

extern "C"
{
#include "my_c_funcs.h"
}


Specifikt for Microsoft Visual C++ V6.0, kan du bruge compiler option /TP
til at sige at _alle_ filer skal oversættes som C++ filer.

Venlig hilsen

Mogens Hansen





Troels Thomsen (07-05-2002)
Kommentar
Fra : Troels Thomsen


Dato : 07-05-02 18:07

> Hvis det ikke er tilladeligt at ændre headerfilen, kan man alle steder man
> includerer den i en C++ fil skrive:
>
> extern "C"
> {
> #include "my_c_funcs.h"
> }

GULD, Tak Mogens


> Specifikt for Microsoft Visual C++ V6.0, kan du bruge compiler option /TP
> til at sige at _alle_ filer skal oversættes som C++ filer.

Ja, den så jeg efter jeg havde klaget mig her i gruppen.
Jeg kunne dog ikke lige finde ud af at overtale ide'et til det.
Er det noget med 'custom build' steps i settings menuen (alt+f7).

mvh Troels



Mogens Hansen (08-05-2002)
Kommentar
Fra : Mogens Hansen


Dato : 08-05-02 05:46


"Troels Thomsen" <troels.thom4sen@stofanet.dk> wrote

> Er det noget med 'custom build' steps i settings menuen (alt+f7).
>

Det er ikke alle options, som der er radio-button's etc. til.
Man burde kunne _skrive_ den option i edit-feltet i Settings dialogen.

Venlig hilsen

Mogens Hansen



Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408514
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste