Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    177

    Impostare il progetto di una serie di piccoli programmi in c++

    Nuovo del forum, ciao a tutti. Sto creando alcuni piccoli programmini a supporto della mia professione,uso c++ e CodeBlocks, livello direi base.
    Dato che molte operazioni sono ripetitive stavo pensando di creare funzioni che in file "esterni" che poi includo tramite "include". Stessa cosa per alcune strutture dati che potrei definire una volta per tutte.
    Sapete darmi qualche indicazione su come impostare il tutto, qualche link a qualche topic del forum, qualche tutorial, quali sono le direttive da dare al precompilatore per non includere inutilmente più volte lo stesso file, ecc?
    Tenete conto che il mio livello è molto base!
    Grazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156
    quali sono le direttive da dare al precompilatore per non includere inutilmente più volte lo stesso file, ecc?
    puo dare un'occhiata qui
    http://en.wikipedia.org/wiki/Pragma_once

    oppure, se vuole andare più sul classico
    http://msdn.microsoft.com/it-it/library/2a1b21sf.aspx
    http://www.cprogramming.com/referenc...or/ifndef.html
    http://www.cplusplus.com/forum/beginner/7877/

    edit 3 Esempio concreto di questa alternativa

    codice:
    #ifndef CLASSE_H
    #define CLASSE_H
    
    
    
    
    class classe
    {
        public:
            classe();
        protected:
        private:
    };
    
    
    #endif
    così una volta che includi il file la prima volta viene definita la macro "CLASSE_H"
    includendo di nuovo il file il compilatore vede che "CLASSE_H" è già definito ed evita di compilare di nuovo tutto

    edit:
    per il resto in codeblocks FILE->NEW->CLASS per creare classi (file .cpp e .h da includere all'occorrenza nel proprio programma) oppure creare una dll
    http://it.wikipedia.org/wiki/Dynamic-link_library

    edit2: a me sembra più facile usare pragma once
    Ultima modifica di Rising1; 26-09-2014 a 13:56

  3. #3
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    177
    io poi mi trovo nella condizione di aver bisogno di calcolare ad esempio il coseno di un angolo sia in alcune librerie da me create, che nel vero e proprio programma, per dirla terra a terra nel file .cpp in cui ho il main.
    Per queste librerie è stato già fatto questo discorso, cioè porre #ifndef ecc, quindi io le includo senza aggiungere altro in tutti i posti dove mi serve, corretto?

  4. #4
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    177
    mettiamo il caso che il mio programma si chiama PROGRAMMA e il main è nel file programma.cpp.
    Diciamo che creo la libreria LIBRERIA.h.
    Dovrei quindi avere un qualcosa del genere:

    file LIBRERIA.h
    #ifndef LIBRERIA_H
    #define LIBRERIA_H

    //qui metto i prototipi delle funzioni che ho implementato in LIBRERIA.cpp

    #endif

    nel file PROGRAMMA.cpp avrò

    #include <LIBRERIA.h>

    L'unico dubbio, ammesso che quanto sopra sia giusto, è:
    all'inizio del file LIBRERIA.cpp, devo mettere
    #include <LIBRERIA.h>?
    mi è parso di vedere questa cosa in uno dei link postati, ma ora nonlo trovo più, credo che mi sto sbagliando.
    Inoltre per il metodo che mi pare più classico, perchè da quanto ho capito è un metodo più "generale".

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156
    Si nel file libreria.cpp devi includere l'header (libreria.h) dove ci sono i prototipi delle tue funzioni ed eventualmente tutto ciò che hai messo in questa libreria (macro, strutture etc)
    Al contrario in programma.cpp basta includere libreria.h

    Si per il resto ifndef funziona come hai detto tu, così se crei un'altra libreria (chiamiamola nuovalib) che a sua volta include libreria.h, se nel programma includi sia libreria.h che nuovalib.h, il compilatore compilerà libreria.h una sola volta

  6. #6
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    177
    Ok, grazie mille, direi che fino a qui ci siamo. Ora ho il seguente problema.
    Diciamo che in libreria.h io definisco la funzione "resistenza" che mi torna utile in programma1 e programma2.
    Dopo un certo tempo mi metto a scrivere programma3, in cui devo ancora usare la funzione "resistenza" già definita in libreria.h, però mi rendo conto che serve fare una modifica/correzione/ne scopro un bug che ora correggo.
    Affinchè la modifica entri a far parte anche di programma1 e programma2, devo effettuare la loro compilazione exnovo, corretto?
    Se usassi una dll questo non servirebbe, perchè sarebbe sufficiente aggiornare quest'ultima, e programma1 e programma2 non devono essere ricompilati, corretto?
    E qui iniziano i dolori, perchè mi risolverebbe un sacco di problemi, ma non riesco a trovare in giro niente che mi chiarisca cosa significa quanto mi butta fuori già di predefinito codeblocks se scelgo come nuovo progetto dll. Qualche altro link, in cui magari, oltre a tutte le direttive ecc che già mi da codeblocks, ho anche l'esempio di come fare con una funzione, e soprattutto di come richiamare questa benedetta dll da un mio programma?
    Grazie grazie in anticipo

  7. #7
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    177
    Quote Originariamente inviata da ing82 Visualizza il messaggio
    Ok, grazie mille, direi che fino a qui ci siamo. Ora ho il seguente problema.
    Diciamo che in libreria.h io definisco la funzione "resistenza" che mi torna utile in programma1 e programma2.
    Dopo un certo tempo mi metto a scrivere programma3, in cui devo ancora usare la funzione "resistenza" già definita in libreria.h, però mi rendo conto che serve fare una modifica/correzione/ne scopro un bug che ora correggo.
    Affinchè la modifica entri a far parte anche di programma1 e programma2, devo effettuare la loro compilazione exnovo, corretto?
    Se usassi una dll questo non servirebbe, perchè sarebbe sufficiente aggiornare quest'ultima, e programma1 e programma2 non devono essere ricompilati, corretto?
    E qui iniziano i dolori, perchè mi risolverebbe un sacco di problemi, ma non riesco a trovare in giro niente che mi chiarisca cosa significa quanto mi butta fuori già di predefinito codeblocks se scelgo come nuovo progetto dll. Qualche altro link, in cui magari, oltre a tutte le direttive ecc che già mi da codeblocks, ho anche l'esempio di come fare con una funzione, e soprattutto di come richiamare questa benedetta dll da un mio programma?
    Grazie grazie in anticipo
    Pretendo troppo? Qualche link o suggerimento di dove andare a guardare?
    Se poi arriva anche qualche esempio facile fcaile...

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quote Originariamente inviata da ing82 Visualizza il messaggio
    Pretendo troppo? Qualche link o suggerimento di dove andare a guardare?
    Se poi arriva anche qualche esempio facile fcaile...
    In un file include (libreria.h) non ci va il codice delle funzioni ma solamente la dichiarazione.
    Per quello dovrai usare un file libreria.cpp.

    A parte questo, la domanda di questo thread esattamente qual è? Non riesci a creare una DLL con CB o come si fa a creare una DLL? O come si usa nei programmi? La situazione è un po' confusa, forse per questo non hai avuto suggerimenti ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    177
    Quote Originariamente inviata da oregon Visualizza il messaggio
    A parte questo, la domanda di questo thread esattamente qual è? Non riesci a creare una DLL con CB o come si fa a creare una DLL? O come si usa nei programmi? La situazione è un po' confusa, forse per questo non hai avuto suggerimenti ...
    Grazie, vedo di chiarire la situazione, che da quando ho iniziato il thread è evoluta.
    Premessa: lavoro nel campo edilizio, più precisamente progettazione strutturale.

    Necessità: creare dei programmi di calcolo personalizzati per automatizzare predimensionamenti, verifiche di elementi strutturali semplici, confronto dei risultati dei programmi di analisi strutturale utilizzati per l'edificio nel suo insieme.
    Molte delle operazioni da fare sono ripetitive, nel senso che mi troverò a doverle sfruttare più volte.

    Dove sono arrivato fino ad ora: man mano che procedo, quando implemento una qualche operazione che so dovrò ripetere altre volte, creo una libreria o la aggiungo ad una libreria che ho già creato, che poi sfrutto (ad essere precisi sfrutterò, perchè sono agli albori) nei programmi che man mano creerò.

    Ulteriore necessità: mi rendo conto che una certa funzione che chiamiamo funzione, messa in libreria.h (la sua implementazione vera e propria è in libreria .cpp) può essere ottimizzata/migliorata o deve essere corretta, senza dover cambiare nulla per quanto riguarda i parametri passati e quello che resituisce.

    Problema: mettiamo che funzione, che è "dentro" libreria.h è utilizzata in programma1, programma2 e programma3. Se vado avanti come sto facendo fino ad ora, dopo aver modificato "funzione", dovrò ricompilare programma1, programma2, programma3.
    Se usassi le dll, questo problema non ci sarebbe, ricompilo la dll, sotituisco la vecchia con la nuova e tutti i programmi che fanno riferimento ad essa restano aggiornati. Direi che mi capiterà abbastanza di frequente di metter mano ad una funzione/libreria, perchè la normativa è in continua evoluzione, perchè aggiungerò la possibilità di verificare con normative diverse, ecc.

    In soldoni cosa non riesco a capire come si fa: non riesco a creare una dll (codeblocks ha le dll tra i tipi di nuovo progetto di default, ma non capisco niente di dove devo andare ad aggiungere le mie funzioni).
    L'altro problema è poi come sfruttare la dll creata da un programma.

  10. #10
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    177
    Quote Originariamente inviata da ing82 Visualizza il messaggio
    In soldoni cosa non riesco a capire come si fa: non riesco a creare una dll (codeblocks ha le dll tra i tipi di nuovo progetto di default, ma non capisco niente di dove devo andare ad aggiungere le mie funzioni).
    L'altro problema è poi come sfruttare la dll creata da un programma.
    Se nessuno ha voglia di fare un esempio, un qualche link dove possa capire che significato hanno tutti quei "comandi predefiniti" che da CodeBlocks per la dll, con quello che ho trovato in giro non sono arrivato a nessuna conclusione (altrimenti non avrei scritto qui...)
    Grazie

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.