Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Integrare C & C++

    Salve a tutti,
    il problema che vi propongo è abbastanza dibattutto in giro ma nn riesco a trovare una risposta adeguata... Ho un certo programma A (molto complesso e grande) scritto in C ed una libreria (header e cpp files) scritta in c++ e voflio integrare le due cose.... il programma A ha un proprio makefile che utilizza gcc come compilatore.... Ho provato ad integrare le cose (includendo gli header della libreria B nei file .c del programma A) ed ovviamente la compilazione si conclude in maniera errata (gli errori sono dovuti al fatto che includo file c++ nudi e crudi nei file c...) che fare? come far convivere c e c++ e risolvere il problema? Ho provato anche a compilare A con c++ o g++ (nella speranza che così i file c++ venissero adeguatamente compilati)ottendo errori sui file sorgenti del programma stesso. La libreria B è ovviamente compilabile esternamente al programma....
    Voglio scusarmi con l'amministratore del forum x aver postato un messaggio molto simile anche nella directory Linux (le 2 cose sono molto simili)
    Grazie
    Luca

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    in teoria, un programma .c compilato come fosse .cpp dovrebbe andare cmq bene al compilatore, se è stato scritto usando una buona programmazione(nonostante il C ti permette di fare più cosa a rischio rispetto C++ che è più severo) e prevedendo un eventuale porting.
    Prova quindi a dargli .cpp e a correggere gli errori dati(saranno dei cast espliciti non usati, errori coi puntatori e altre cose che il C fa passare).

    In alternativa fai il programma col main in C++ e richiami il codice in C facendo:

    codice:
    extern "C" {
    //funzioni da linkare in C linking-mode
    }
    Questa parola chiave così usata risolve il seguente problema problema:che il linker C++ "infiocchetta" i nomi delle funzioni per supportare l'overload delle stesse, il C no e quindi non si capiscono uno con l'altro.
    Con extern non verrà modificato il nome.


    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Ciao, grazie x aiuto ma purtroppo il problema è molto complesso...
    il programma A di cui parlavo è Postgres (completamente in C) mentre le librerie sono da aggiungere alle classi native del DBMS.... una classe nativa del DBMS deve utilizzare le nuove librerie in c++.....
    ho letto che si può in qualche modo accedere da c a classi c++ ma nn riesco a capire come si possa compilare contemporaneamente file di diversa natura (ppena includo un file c++ in uno c il compilatore segnala (ovviamente) l'errore)....
    grazie x l'aiuto
    Luca

  4. #4
    Ho provato a compilare come ,detto, il tutto con un compilatore c++
    senza riuscire a completare correttamente la procedura... gli errori sono legati al fatto che il caro proggramma in C usa parole riservate di C++ per definire strutture (class,typename)... se si rinominassero tali variabili s upponendo un programmazione pulita in c secondo te si potrebbe completare con successo la compilazione dei sorgenti c/c++ con un compilatore c++?

    GRAZIE

  5. #5
    ok..l'idea precedente si è rivelata malsana e deve essere scartata in quanto nascono nuovi e complessi problemi in fase di compilazione delle classi native del DBMS.. ho letto che specificando una funzione c++ come extern "c" ,definendo un header condiviso tra i programmi c e c++ in cui si specifica e della funzione è possibile invocare dca c la suddetta funzione... quello che mi chiedo è se i due programmai debbano essere compilati separatamente.... di seguito un estratto dell'articolo a cui faccio riferimento...
    Help


    /*******
    Accessing C++ Code From Within C Source
    If you declare a C++ function to have C linkage, it can be called from a function compiled by the C compiler. A function declared to have C linkage can use all the features of C++, but its parameters and return type must be accessible from C if you want to call it from C code. For example, if a function is declared to take a reference to an IOstream class as a parameter, there is no (portable) way to explain the parameter type to a C compiler. The C language does not have references or templates or classes with C++ features.

    Here is an example of a C++ function with C linkage:

    #include <iostream>
    extern "C" int print(int i, double d)
    {
    std::cout << "i = " << i << ", d = " << d;
    }

    You can declare function print in a header file that is shared by C and C++ code:

    #ifdef __cplusplus
    extern "C"
    #endif
    int print(int i, double d);
    /*******

  6. #6
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    che io sappia non devono essere compilati separatamente.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.