- Messaggi: 25
- Ringraziamenti ricevuti 0
Questione di stile
11 Anni 5 giorni fa #1
da prinaldi
Questione di stile è stato creato da prinaldi
Ho un problema di stile di programmazione; se compilo (utilizzo C18) il codice seguente mi da ovviamente un errore a livello di linker per ridefinizione della routine sub0.
Oltre alla ovvia soluzione di inserirla in un ulteriore file esterno alle due librerie e' possibile attraverso #ifdef, #define ecc, averlo sia in una libreria che nell'altra?
Come e' piu' corretto scrivere il codice?
Grazie per l'aiuto.
Pierluigi
/* main.c */
#include "lib1.h"
#include "lib2.h"
void main(void){
sub0();
sub1();
sub2();
}
/* lib1.h */
#ifndef _LIB1_H
#define _LIB1_H
void sub0 (void);
void sub1 (void);
#endif
/* lib1.c */
#include "lib1.h"
void sub0(void){
......
}
void sub1(void){
......
}
/* lib2.h */
#ifndef _LIB2_H
#define _LIB2_H
void sub0 (void);
void sub2 (void);
#endif
/* lib2.c */
#include "lib2.h"
void sub0(void){
......
}
void sub2(void){
......
}
Oltre alla ovvia soluzione di inserirla in un ulteriore file esterno alle due librerie e' possibile attraverso #ifdef, #define ecc, averlo sia in una libreria che nell'altra?
Come e' piu' corretto scrivere il codice?
Grazie per l'aiuto.
Pierluigi
/* main.c */
#include "lib1.h"
#include "lib2.h"
void main(void){
sub0();
sub1();
sub2();
}
/* lib1.h */
#ifndef _LIB1_H
#define _LIB1_H
void sub0 (void);
void sub1 (void);
#endif
/* lib1.c */
#include "lib1.h"
void sub0(void){
......
}
void sub1(void){
......
}
/* lib2.h */
#ifndef _LIB2_H
#define _LIB2_H
void sub0 (void);
void sub2 (void);
#endif
/* lib2.c */
#include "lib2.h"
void sub0(void){
......
}
void sub2(void){
......
}
Si prega Accedi o Crea un account a partecipare alla conversazione.
- prinaldi
- Autore della discussione
- Junior Member
Riduci
Di più
11 Anni 3 giorni fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Questione di stile
Ciao,
Il nome delle routine deve essere unico in tutto il progetto, indipendentemente che stiano in una libreria o nel file principale.
Non e' un caso che in C molte librerie hanno dei nomi di funzioni piu' complessi proprio per evitare che il loro utilizzo possa vincolare l'utilizzo dei nomi di funzioni nel programma dell'utente finale.
Per esempio una funzione di inizializzazione del modulo LCD potrebbe essere:
void initialize (void {
}
ma e' meglio usare
void initialize_LCD (void {
}
visto che il secondo nome e' meno probabile che possa creare conflitti di nomi.
Saluti,
Mauro
Il nome delle routine deve essere unico in tutto il progetto, indipendentemente che stiano in una libreria o nel file principale.
Non e' un caso che in C molte librerie hanno dei nomi di funzioni piu' complessi proprio per evitare che il loro utilizzo possa vincolare l'utilizzo dei nomi di funzioni nel programma dell'utente finale.
Per esempio una funzione di inizializzazione del modulo LCD potrebbe essere:
void initialize (void {
}
ma e' meglio usare
void initialize_LCD (void {
}
visto che il secondo nome e' meno probabile che possa creare conflitti di nomi.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
11 Anni 3 giorni fa #3
da prinaldi
Risposta da prinaldi al topic Questione di stile
Sul fatto che i nomi siano univoci ok.
Il mio problema è che ho una routine che serve sia ad una libreria che ad un'altra. Per evitare il terzo include (che sto usando per andare avanti nel progetto) mi piaceva di poterla mettere sia in una lib che nell'altra in maniera che se utilizzo una sola lib è già inclusa e se aggiungo l'altra (che potrebbe essere utilizzata anche da sola) il tutto continua a funzionare.
Pierluigi
Il mio problema è che ho una routine che serve sia ad una libreria che ad un'altra. Per evitare il terzo include (che sto usando per andare avanti nel progetto) mi piaceva di poterla mettere sia in una lib che nell'altra in maniera che se utilizzo una sola lib è già inclusa e se aggiungo l'altra (che potrebbe essere utilizzata anche da sola) il tutto continua a funzionare.
Pierluigi
Si prega Accedi o Crea un account a partecipare alla conversazione.
- prinaldi
- Autore della discussione
- Junior Member
Riduci
Di più
- Messaggi: 25
- Ringraziamenti ricevuti 0
11 Anni 1 Giorno fa #4
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Questione di stile
Ciao,
ora ho capito.
In questo caso in ogni file di libreria potresti includere la tua funzione
#ifndef _LIB2_H
#define _LIB2_H
void sub0 (void);
void sub2 (void);
#endif
Il primo file che la introduce non ha problemi mentre il secondo trova definito il nome della funzione e non la dichiara.
Se introduci anche il file C devi fare lo stesso per l´implementazione della funzione.
Saluti,
Mauro
ora ho capito.
In questo caso in ogni file di libreria potresti includere la tua funzione
#ifndef _LIB2_H
#define _LIB2_H
void sub0 (void);
void sub2 (void);
#endif
Il primo file che la introduce non ha problemi mentre il secondo trova definito il nome della funzione e non la dichiara.
Se introduci anche il file C devi fare lo stesso per l´implementazione della funzione.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
11 Anni 1 Giorno fa #5
da prinaldi
Risposta da prinaldi al topic Questione di stile
provo e ti faccio sapere.
Grazie
Grazie
Si prega Accedi o Crea un account a partecipare alla conversazione.
- prinaldi
- Autore della discussione
- Junior Member
Riduci
Di più
- Messaggi: 25
- Ringraziamenti ricevuti 0
Moderatori: Mauro Laurenti, StefA
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.