Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C]migliore approccio alle funzioni

    salve a tutti, ho iniziato a progammare da poco in C e avrei qualche dubbio sull'utilizzo delle funzioni.
    In pratica, se in un programma ho più funzioni che richiedono tutte gli stessi argomenti è preferibile, dal punto di vista delle prestazioni e della correttezza del codice, unire tutte le funzioni in un unica funzione? oppure fare in modo che ogni funzione chiami la funzione "precedente", quella che secondo la logica del programma dovrebbe essere eseguita dopo?o è corretto anche lasciarle separate e chiamarle una per volta da main?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Ogni funzione ha un suo significato "logico" all'interno di tutto il programma.

    Se ha scopo di esistere (sia dal punto di vista logico, sia perché viene utilizzata più volte) non vedo perché tu debba "riunirne" più di una anche se hanno gli stessi argomenti.

    Se poi vediamo qualche esempio concreto, si può discuterne meglio ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    si certo...allora...io ho ad esempio le funzioni rd_choice_ptr e rd_txt che in pratica leggono dei dati in un file binario e li inseriscono in una struttura creata a questo scopo:
    codice:
    int rd_choice_ptr(FILE *fp,int entrn,struct entry tbl[])
        {
            int i;
            for (i=0;i<=entrn;i++)                                         
                {
                    if (fseek(fp,tbl[i].offset,0))
                        return -1;
                    for(int n=0;n<tbl[i].txtdata.choicen;n++)
                        {
                            printf("%#x  ",tbl[i].txtdata.txtptr[n]=rd_ptr(fp,ftell(fp)));       
                            if (fseek(fp,4,1))
                                return -1;
                        }
                    printf("\n");
                }
            return (i-1);                                                   
        }
    nella funzione si vede una chiamata a rd_ptr, è un'altra funzione che si occupa di leggere dei dati dal file aperto...
    codice:
    _Bool rd_txt(FILE *fp,int entrn,struct entry tbl[])        
         {     
               int i,n,l;
               for (i=0;i<=entrn;i++)
                  {
                     for (n=0;n<tbl[i].txtdata.choicen;n++)
                         {
                             if(fseek(fp,tbl[i].txtdata.txtptr[n],0))
                                 return false;
                             for(l=0;l<50;l++)
                                 {
                                      if((tbl[i].txtdata.hextxt[n][l]=fgetc(fp))==0xFF)
                                            break;
                                 }
                         }
                     if(n<tbl[i].txtdata.choicen)        
                         return(false);
                 }
             if (i-1<entrn)
                 return(false);
             return(true);
         }
    la struttura invece è così formata:
    codice:
    typedef long int offset;
    typedef unsigned char byte;
    
    struct txt
        {
            offset txtptr[10];               
            byte hextxt [10][30];      
            char asciitxt [10][30];             
            byte choicen;              
        };
    
    struct entry                        
        {
            offset offset;            
            struct txt txtdata;
    
        };
    il mio dubbio era...teoricamente è più corretto unire le due funzioni, chiamare la prima dalla seconda o lasciarle così come sono??

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Ma

    rd_ptr

    è una terza funzione ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    si esatto ma non centra col problema...puoi benissimo considerarla come una qualsiasi fread()
    comunque è:
    codice:
    offset rd_ptr(FILE *fp,offset offset)                                                           
        {
            int tblptr;
            if(fseek(fp,offset,0))
                return -1;
            if ((fread(&tblptr,sizeof(char),4,fp))!=4)
                return -1;
            tblptr-=0x8000000;                  
            return (tblptr);
       }

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Va bene separata ...

    Se non ne modifichi il tipo di funzionamento (cosa accetta, cosa restituisce), puoi modificarla internamente senza dover modificare "tutte" le funzioni in cui si trova.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    ok...e dal punto di vista delle prestazioni cambia nulla?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Non visibilmente ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.