|
| .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
| |
|
|