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){
......
}

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • prinaldi
  • Junior Member
  • Junior Member
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

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
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

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • prinaldi
  • Junior Member
  • Junior Member
Di più
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

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
11 Anni 1 Giorno fa #5 da prinaldi
Risposta da prinaldi al topic Questione di stile
provo e ti faccio sapere.
Grazie

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • prinaldi
  • Junior Member
  • Junior Member
Di più
Moderatori: Mauro LaurentiStefA

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login