Ho lavorato a progetti Java/J2ee, in cui seguo la struttura Maven. Voglio sviluppare [dire un interprete di riga di comando in linux {ubuntu}] in C. Non sviluppo mai progetti in C. Voglio sapere quale struttura di progetto dovrei seguire.Che cos'è una buona struttura di progetto in C
risposta
Non esiste uno "standard" per il progetto C in questo aspetto. Sicuramente se il tuo progetto è piccolo, spesso tutto verrà inserito in una singola directory.
Puoi provare a scaricare alcuni famosi progetti C open-source e dare un'occhiata al loro codice.
Su un livello inferiore, il codice deve essere modulare. Ogni modulo (che in C si manifesta di solito in una struttura dati con un insieme di funzioni per agire su di esso) ha una propria coppia di file .h e .c, con il file .h che è l'interfaccia pubblica visibile ai client del modulo e il file .c è l'implementazione privata.
È possibile fare riferimento alla struttura del progetto OpenSSL. È un famoso open source e ha una buona struttura di progetto.
Funzionalità separate nei moduli: file .c con dettagli di implementazione/definizioni abbinati a file .h con dichiarazioni.
Cercare di non inquinare spazi dei nomi utilizzando la funzione statica per le funzioni e un prefisso modulo comune per i simboli esterni.
Creare librerie se si dispone di funzionalità che possono essere incapsulate e riutilizzate.
Un suggerimento:
/project
README
LICENCE
Makefile
# mabe configure.am Makefile.am etc.
# see http://en.wikipedia.org/wiki/GNU_build_system
/src
Makefile
a.h
a.c
b.h
b.c
/subunit
x.h
x.c
y.h
y.c
# each file.c has a header file.h but not necessarily
...
Guarda Nginx su GitHub e sfogliare la struttura del progetto on-line.
Come diceva Eli Bendersky, dipende strettamente dalla complessità del progetto.
Lo standard suggerisce di dividere il più possibile in biblioteche. Il punto è che potresti voler riutilizzare le tue librerie altrove. Con l'esempio, questo è un mio progetto:
├── AUTHORS
├── COPYING
├── ChangeLog
├── Makefile.am
├── NEWS
├── README
├── configure.ac
├── libs
│ ├── featsel
│ │ ├── Makefile.am
│ │ ├── commander.c
│ │ ├── featsel
│ │ │ ├── commander.h
│ │ │ ├── feattuple.h
│ │ │ └── types.h
│ │ ├── featsel.h
│ │ ├── feattuple.c
│ │ ├── headers
│ │ │ └── datatypes.h
│ │ └── tests
│ │ ├── Makefile.am
│ │ └── test00.c
│ ├── mbox
│ │ ├── Makefile.am
│ │ ├── README
│ │ ├── control.c
│ │ ├── error.c
│ │ ├── headers
│ │ │ ├── datatypes.h
│ │ │ ├── mail.h
│ │ │ ├── parse.h
│ │ │ ├── split.h
│ │ │ └── strings.h
│ │ ├── interface.c
│ │ ├── mail.c
│ │ ├── mbox
│ │ │ ├── descriptor.h
│ │ │ ├── error.h
│ │ │ ├── mail.h
│ │ │ └── types.h
│ │ ├── mbox.h
│ │ ├── parse.c
│ │ ├── split.c
│ │ └── strings.c
│ └── thread_queue
│ ├── Makefile.am
│ ├── thrdqueue.c
│ └── thrdqueue.h
├── reconf
└── src
├── Makefile.am
└── main.c
Io personalmente preferisco di mettere tutte le librerie in una directory libs
. Ogni libreria, tranne quelle banali, ha una propria directory di intestazione privata ed esporta un'intestazione pubblica per mezzo di una directory con lo stesso nome della libreria.
Il file di origine del programma stesso viene inserito nella directory src.
- 1. Che cos'è una struttura "compressa" in C?
- 2. Qual è una buona struttura di directory per progetti C++ più grandi che utilizzano Makefile?
- 3. Una buona pratica/progetto per programmatore PHP
- 4. Struttura di cartelle per un progetto C
- 5. È buona norma nascondere la definizione della struttura in C?
- 6. Come creare una struttura di progetto di Visual Studio C++ che corrisponde alla struttura del file system?
- 7. Che cos'è una buona struttura di directory di distribuzione per le app console java
- 8. C/C++: dati di riempimento o imbottitura in una struttura
- 9. fread() una struttura in c
- 10. Alla ricerca di una buona struttura cheat cheet
- 11. Struttura progetto MVC 3
- 12. Inizializzazione di una struttura globale in C
- 13. l'inizializzazione diretta di una struttura in C
- 14. dichiarazione anticipata di una struttura in C?
- 15. Struttura di directory per una libreria C++
- 16. Struttura del progetto WPF consigliata?
- 17. fornisce una dimensione extra di una struttura in C#
- 18. Buona struttura dati per la conversione dell'unità?
- 19. Struttura del progetto JavaFX
- 20. Che cos'è una buona funzione hash?
- 21. Lettura di byte in una struttura in C#
- 22. Casting una struttura C in un altro
- 23. Che cos'è una buona struttura dati Java per memorizzare gli oggetti del gioco RPG?
- 24. Come restituire una struttura anonima in C?
- 25. Struttura C e struttura C++
- 26. Alla ricerca di una buona implementazione SIP in C#
- 27. come definire una struttura come in C
- 28. Che cos'è una buona implementazione del parser RDFa di Javascript?
- 29. definisce una struttura all'interno di una classe in C++
- 30. Struttura vuota in C e struttura vuota in C++
Sto cercando di trovare qualcosa di simile. Sto pensando 'Maven' ma per C. Ci dovrebbe essere un makefile, alcuni test? Maven è diventato lo standard defacto in Java per la struttura del progetto. –