Come passare parametri a una funzione in C

3

Supponiamo che io stia scrivendo un programma in C in cui vengono chiesti diversi parametri all'inizio dell'esecuzione all'utente e quindi rimangono costanti fino alla fine. Ora, ho bisogno di passare questi parametri ad una funzione.

Dal momento che sono invariati attraverso il programma, la mia tentazione sarebbe dichiararli come variabili globali, per renderli visibili a tutte le funzioni. Tuttavia, vedo che questa non è una buona pratica se la dimensione del programma diventa grande (questo è stato chiesto e ha risposto qui ).

Tuttavia, non vedo il punto di creare funzioni con, diciamo, 6 argomenti, quando quelli variabili sono solo 2. Esiste un modo più elegante per farlo senza compromettere troppo la manipolabilità del codice?

    
posta pppqqq 09.10.2013 - 22:11
fonte

2 risposte

10

Se stai richiedendo diversi parametri all'inizio e questi parametri non cambiano mai e devono essere passati insieme, usa una struct:

struct options {
    bool isDebug;
    int numberOfDigits;
    char userName[40];
};

Quindi non hai sei argomenti, in cui solo due sono variabili, ma solo tre:

doItNow(int speed, float precision, struct options* opts);

(Anche se hai deciso di utilizzare le globali, sarebbe comunque meglio raggrupparle insieme in quel modo.)

Un grande vantaggio nel passare queste opzioni nella funzione è che rende chiaro al chiamante che sono richieste dalla funzione.

    
risposta data 09.10.2013 - 22:24
fonte
4

@Steven Burnap ha delineato la mia opzione preferita. Tuttavia, spesso nei grandi programmi una piccola funzione lungo la struttura delle chiamate ha bisogno delle informazioni e rende il codice meno leggibile e più difficile da mantenere se si passano i dati nello stack come parametri.
Un alterno in C rende i dati statici all'interno di un modulo e fornisce una o più funzioni getter e setter. La funzione setter deve essere richiamata solo all'inizializzazione del programma e può essere facilmente verificata, e tutti i riferimenti ai dati possono essere trovati rapidamente cercando le chiamate al getter. Questo è uno schema comune per cose come i parametri della riga di comando e VSP (Variable System Paramaters - dati come elementi di configurazione che non cambiano durante l'esecuzione del programma)

Il debugging diventa più facile poiché puoi posizionare gli output di traccia nelle routine.

    
risposta data 10.10.2013 - 02:52
fonte

Leggi altre domande sui tag