Visualizzazione risultati 1 fino 13 di 13

Discussione: [C] parametri variabili in una funzione

  1. #1
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,755

    Predefinito [C] parametri variabili in una funzione

    Salve.
    Com'é il prototipo di una funzione che accetta un numero n di parametri (variabili)?
    (ad esempio, una specie di varargs in java).

    (se non è possibile), allora come funziona la printf?

    Codice:
    //...
    printf("Oggi, 20 gennaio, è una bella giornata\n"); //1 parametro
    printf("Oggi, %d gennaio, è una bella giornata\n",giorno); //2 parametri
    printf("Oggi, %d %s, è una bella giornata\n",giorno, stringa); //3 parametri
    //...
    Grazie, ciao.

  2. #2
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    Intanto devi includere la libreria stdarg.h e poi usi va_list, va_arg, ecc...
    Ecco un esempio:
    Codice:
    #include <stdio.h>
    #include <stdarg.h>
    
    int somma(int, ...);
    
    int main(){
      int a = 10, b = 100, c = 1000, d = 10000;
      printf("%d", somma(2, a, b));
      printf("%d", somma(3, a, b, c));
      printf("%d", somma(4, a, b, c, d));
    }
    
    int somma(int argNum, ...){
      int totale = 0;
      va_list ap;
      va_start(ap, argNum);
      while(argNum--)
         totale += va_arg(ap, int);
      va_end(ap);
      return totale;
    }
    Ultima modifica di andreafallico : 21-01-2010 alle ore 00.37.08

  3. #3
    Guest

    Predefinito

    @alemoppo: queste cose non le abbiamo fatte a scuola

    @andreafallico non mi sono chiari quei puntini che hai messo.
    Ultima modifica di atterzolivello : 21-01-2010 alle ore 16.07.14

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,755

    Predefinito

    Citazione Originalmente inviato da atterzolivello Visualizza messaggio
    @andreafallico non mi sono chiari quei puntini che hai messo.

    Visto che sei un "informatico", in java dovresti conoscere i varargs!. Non sono di certo io la persona che te li deve spiegare :P

    ...ma non sapevo che si potevano usare pure in C (in un modo lievemente diverso, comunque...).

    Grazie andrea

    Ciao!
    Ultima modifica di alemoppo : 21-01-2010 alle ore 16.19.38

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da andreafallico Visualizza messaggio
    Intanto devi includere la libreria stdarg.h e poi usi va_list, va_arg, ecc...
    Ecco un esempio:
    Codice:
    #include <stdio.h>
    #include <stdarg.h>
    
    int somma(int, ...);
    
    int main(){
      int a = 10, b = 100, c = 1000, d = 10000;
      printf("%d", somma(2, a, b));
      printf("%d", somma(3, a, b, c));
      printf("%d", somma(4, a, b, c, d));
    }
    
    int somma(int argNum, ...){
      int totale = 0;
      va_list ap;
      va_start(ap, argNum);
      while(argNum--)
         totale += va_arg(ap, int);
      va_end(ap);
      return totale;
    }
    io quelli in grassetto e sottolineti dico

    e comunque, non ti offendere, ma hai leggermente stancato con questa storia dell'informatico infondo io non ti ho fatto niente..
    e poi a scuola non abbiamo mai parlato di warargs..
    ora dimmi sono io ad essere ignorante o è colpa della scuola?

    Ciao

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,755

    Predefinito

    Dai, scherzavo!... Per i vararg guarda ad esempio qui oppure qui. (basta che digiti vararg su google

    ...La storia dell'informatica? Beh, ancora non mi sono ripreso dalla discussione dell'altra volta

    Ciao!
    Ultima modifica di alemoppo : 21-01-2010 alle ore 16.30.38

  7. #7
    Guest

    Predefinito

    Quale? Non ricordo.. ne abbiamo fatte tante

    Ciau beddhu!

  8. #8
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    I tre puntini (...) stanno ad indicare che la funzione accetta un numero variabile di argomenti.

    Citazione Originalmente inviato da atterzolivello Visualizza messaggio
    ora dimmi sono io ad essere ignorante o è colpa della scuola?
    E' colpa tua.

  9. #9
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Visto che sei un "informatico", in java dovresti conoscere i varargs!. Non sono di certo io la persona che te li deve spiegare :P

    ...ma non sapevo che si potevano usare pure in C (in un modo lievemente diverso, comunque...). ...
    Nota di colore: a dire il vero i varargs sono stati introdotti solo dalla versione 1.5 (per gli amici "Java 5"), diversi anni dopo il C...

    Statemi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  10. #10
    Guest

    Predefinito

    Citazione Originalmente inviato da dementialsite Visualizza messaggio
    Nota di colore: a dire il vero i varargs sono stati introdotti solo dalla versione 1.5 (per gli amici "Java 5"), diversi anni dopo il C...

    Statemi bene...
    Permettimi "sitodemenziale" (no scherzo.. che butto nome ti scegliesti..)

    Ad alemoppo un sentito e di cuore: Tiè

  11. #11
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,755

    Predefinito

    @dementialsite: Non ho capito... cioè? Sì, lo sapevo che i varargs ci sono dalla 1.5, invece in C (visto che ci sono) ci sono da tempo (il C è "vecchio" rispetto al java...). ma quindi?

  12. #12
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    @dementialsite: Non ho capito... cioè? Sì, lo sapevo che i varargs ci sono dalla 1.5, invece in C (visto che ci sono) ci sono da tempo (il C è "vecchio" rispetto al java...). ma quindi?
    credo che era a titolo puramente informativo :)

    tiè, fatti una lettura qui..l'argomento è molto semplice, sono 4 macro che si muovono sulla memoria grazie al fatto che conoscono il tipo, ebbene si, i tipi servono anche a questo :D
    http://a2.pluto.it/a2752.htm
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  13. #13
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    @dementialsite: Non ho capito... cioè? Sì, lo sapevo che i varargs ci sono dalla 1.5, invece in C (visto che ci sono) ci sono da tempo (il C è "vecchio" rispetto al java...). ma quindi?
    Citazione Originalmente inviato da Xsescott Visualizza messaggio
    credo che era a titolo puramente informativo :) ...
    Confermo che era a scopo puramente informativo, aggiungendo che sembrava che affermassi la non esistenza dei varargs in C (in Java 5 li hanno sviluppati proprio prendendo il C come esempio, visto che la sintassi è più o meno la stessa).

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •