Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [C] - Funzioni con numero di parametri variabili...

    Salve a tutti, c'è la possibilità di creare funzioni con numero di parametri variabili?

    Un esempio è la printf, il cui prototipo è questo:

    int printf (const char*, ...);

    Come posso creare una funzione che accetti 1 oppure 4 parametri a seconda dei casi che mi servono?

    Grazie a tutti

  2. #2
    “Guardo in alto mentre cammino, così le lacrime non scenderanno...”
    Kyu Sakamoto

  3. #3
    io vorrei realizzare una cosa tipo printf....

    ho letto il tutorial sopra ma non è molto chiaro...il come si possa realizzare tutto questo...

    cioè

    se io faccio int Ad( const char *Stringa, ... );

    poi come faccio riferimento ai parametri eventualmente aggiunti nella chiamata?

    forse non ho capito niente, abbiate pazienza....


  4. #4

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Prova questo semplice programmino:
    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdarg.h>
    
    void funz_vararg (char *formato, ...)
    {
        size_t len, i;
        va_list ptr;
        va_start (ptr, formato);
    
        len = strlen (formato);
    
        for (i = 0; i < len; i++)
        {
            if (formato[i] == 'C')
            {
                char val = va_arg (ptr, char);
                printf ("Parametro char: %c\n", val);
            }
            else if (formato[i] == 'I')
            {
                int val = va_arg (ptr, int);
                printf ("Parametro int: %d\n", val);
            }
            else if (formato[i] == 'S')
            {
                char *val = va_arg (ptr, char*);
                printf ("Parametro char*: %s\n", val);
            }
        }
    
        va_end (ptr);
    }
    
    int main (void)
    {
        funz_vararg ("IS", 10, "ciao");
        printf ("-----------\n");
        funz_vararg ("CISC", 'A', 24, "prova", 'Z');
        return 0;
    }
    Se non è chiaro, spiego.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    io utilizzo dev-cpp, e compilando mi da questi errori:

    In function `funz_vararg':

    [Warning] `char' is promoted to `int' when passed through `...'

    [Warning] (so you should pass `int' not `char' to `va_arg')

    if this code is reached, the program will abort



  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Vincent
    io utilizzo dev-cpp, e compilando mi da questi errori:

    In function `funz_vararg':

    [Warning] `char' is promoted to `int' when passed through `...'

    [Warning] (so you should pass `int' not `char' to `va_arg')

    if this code is reached, the program will abort


    Nessun warning a me con VC++ ... comunque è solo un warning che dice che in effetti un char viene passato come int, quindi credo che sia meglio mettere:

    char val = (char) va_arg (ptr, int);

    nel caso di if (formato[i] == 'C')
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Per DevCpp, per evitare una exception (legata all'implementazione di queste funzioni), devi scrivere

    char val = va_arg (ptr, int);

  9. #9
    Grazie a tutti siete stati gentilissimi, vorrei solo aver informazioni più dettagliate riguardo la faccenda, cioè il funzionamento dei puntatori alla lista di parametri...

    cosa sono va_list, va_start, va_arg e va_end? esiste qualche thread che ne parla oppure qualcuno me le spiega

    Grazie ancora

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Vincent
    cosa sono va_list, va_start, va_arg e va_end? esiste qualche thread che ne parla oppure qualcuno me le spiega
    http://www-ccs.ucsd.edu/c/stdarg.html
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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