|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
[C] Funzione con num argomenti variabile
Come posso realizzare una funzione che accetti in input un num di argomenti variabile??
Codice:
int print_log(FILE *stream, const char *format,char *arg1,arg2..argn){
....
fprintf(stream,format,arg1...argn );
....
fflush(stream);
close(stream);
...
}
Grazie |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2002
Città: Napoli
Messaggi: 543
|
Dal profondo della mia ignoranza so che ad es. in C++ è possibile l'overloading di una funzione..
Non so se in C si possa fare ma mi pare di no.. L'overloading di una funzione permette di dichiarare più prototipi di una stessa funzione. Ogni prototipo può differire per numero di parametri e tipi (mi pare). Poi ci pensa il compilatore a capire quale prototipo utilizzare Spero che sia stato di aiuto e che non abbia detto sciocchezze.. |
|
|
|
|
|
#3 | |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16213
|
Re: [C] Funzione con num argomenti variabile
Quote:
Esistono tre macro, va_start, va_arg e va_end, definite in stdarg.h. Prova a leggere la documentazione del compilatore, le man pages, o il Kernighan&Ritchie. In alternativa, potresti passare come argomento un array di stringhe, e fare del parsing.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Aug 2003
Città: Rimini
Messaggi: 422
|
Certo che si puo, pero devi passare alla funzione un puntatore ad un array o a una lista, o a quel che vuoi.
Poi dentro la funzione, in base alla struttura dati che hai usato, ti regoli di conseguenza. OK? |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Re: Re: [C] Funzione con num argomenti variabile
Quote:
|
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
ho pero letto che nn è molto sicuro usare i vari va_XXX.
__________________
Gnu/Linux User
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Roma
Messaggi: 806
|
Quote:
Le ho usato e vanno alla grande. L'unica accortezza da usare è che bisogna ricordarsi che queste funzioni sono delle MACRO e pertanto vanno trattate con le dovute attenzioni che tipicamente si riservano alle macro cel C. |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Allora la printf non è sicura ? |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
secondo il manuale della Libc anche printf è insicura
__________________
Gnu/Linux User
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Hai un link ?
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
ok...ma è una insicurezza intrinseca di printf (e anche di scanf), ma non certo un problema del passaggio dei parametri...
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Pensavo anche io di passare una stringa e poi parsificarla...ma diventerebbe sconveniente in questo modo creare poi gli argomenti da pasare alla funzione stessa... in fondo devo solo fare 2 operazioni "comuni" a ogni chiamata...
Ultima modifica di cn73 : 13-04-2004 alle 11:46. |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Re: Re: [C] Funzione con num argomenti variabile
Quote:
Ho approfondito...è proprio così basta dichiarare la funzione Codice:
int print_log(FILE *stream, const char *format, ... ) |
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Re: Re: [C] Funzione con num argomenti variabile
Ecco, semplicissimo!
Codice:
#include <stdlib.h>
void print_log(FILE *stream, char *format, ... ){
va_list args; //punta agli argomenti privi di nome...
va_start(args,format); //punta al primo argomento...
...
vfprintf(stream,format,args);
...
fflush(stream);
va_end(args);
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:09.



















