Newsgroup: it.comp.lang.c
Titolo: Variabili opzionali in una funzione

Salve a tutti
Premetto che arrivo da VB e di C non conosco molto.
La mia domanda è la seguente: come posso fare, nella dichiarazione di una
funzione, a dichiarare una variabile come opzionale??
Mi spiego meglio.
In VB se io scrivo:
Private Sub pippo(pippo1 as string,pippo2 as string,[pippo3 as string])
.......
end sub
la variabile pippo3 sarà opzionale, e quindi non sarà necessario metterla
nel richiamo della funzione......come posso fare una cosa del genere in
C????
Grazie a tutti
ciao
p.s. altra piccola domanda: esiste una libreria che esegua calcoli tipo
calcolo di volume, superficie eccetera di figure geometriche? Grazie ancora
ciao

a 'c' verra' automaticamente assegnato il valore -1.
nel compilatore borland 5.x sembra non funzionare cmq secondo me 
void  prova(int, int, int)
e
void  prova(int, int)
mi sembrano due funzioni diverse e quindi da chiamarsi in modo diverso
(nel linguaggio C).
In C++ non c'è questa limitazione così uno può chiamare 
prova(1,2);
oppure 
prova(1,2,3);
e il compilatore sà quale funzione con lo stesso nome è adatta ad
essere chiamate. 
Perchè questo modo di chiamate non è stato implementato anche per il
linguaggio C? 

 mi sembrano due funzioni diverse e quindi da chiamarsi in modo diverso
Non puoi fare cosi' perche' cosi' hai fatto l'overloading della funzione
prova, quindi prova(int,int,int) e prova(int,int) sono completamente due
funzioni diverse nonostante abbiano lo stesso nome; a lui invece serviva
usare una sola funzione con argomenti facoltativi.


farò pratica e per te mi trasformerò in una copisteria (GFX-Dev)

linguaggio C? 
e la printf non lo fa?
il prototipo è:
int printf (const char*, ...);
i "..." indica che gli argomenti devono essere minimo uno e possono
essere piu' di uno.

essere piu' di uno.
Si`, ma questo ha poco a che vedere con gli argomenti "opzionali" del
C++. Gli argomenti variabili si gestiscono in tutt'altro modo, ed
inoltre vengono esplicitati a runtime.
Gli argomenti opzionali del C++ sono gestiti invece dal compilatore, a
compile time :).
Ciao.
-- 
void
<void> Pikkio: Baciami il sederino :)
<Pikkio> void: (___)(___) SMACK

 Penso tu ti stia confondendo con il C++.
Scusa. Hai ragione. L'ho provato solo adesso con il gcc.
Non funziona, mi stavo confondendo con il C++.
Attento pero', nemmeno l'overloading mi funziona come hai suggerito tu,
perche' anche l'overloading e' C++ infatti:
se faccio in C
void prova();
void prova(int, int);
void prova(char, int, double);
void prova(double, char *, float);
Mi da errore di conflitto.
Quindi, non saprei, forse dovrebbe usare gli argomenti illimitati ecc...
-- 
Vladislav Valtchev

Quindi, non saprei, forse dovrebbe usare gli argomenti illimitati ecc...
L`unica via sono i varargs ( variable arguments ), quindi i "...".
Ciao :)


 linguaggio C?
Si chiama overloading e per fortuna non l'hanno implementato nel C (non so
se anche nell'ultimissimo strandard). IMHO e' concettualmente sbagliato dare
lo stesso nome a due cose diverse (due funzioni con un differente numero di
parametri sono diverse), crea solo confusione e rende meno immediata la
lettura del codice.
Luca

 ha scritto nel messaggio
news:baa2if$e2n$1...@galileo.it.ip-plus.net...

vero :) Ma è innegabile che se si evitano problemi di conflitti; utilizzare
un unico nome di funzione con più funzioni che ti gestiscono gran parte di
tipi di dati diversi (int, double, char etc) automaticamente lasciando al
compilatore la possiblità di scegliere al posto tuo è decisamente meglio che
creare 5 funzioni diverse che fanno lo stesso lavoro ma con tipi di dato
diversi magari dovendo dirigere il flusso (scrivendo quindi altro codice) di
dati alla funzione corretta tramite una switch o simili.


ok grazie Luca!


Beh, non e' che il compilatore C++ usi la funzione corretta "per magia".
L'if o lo switch che avrei dovuto scrivere io lo scrive lui, ma quel codice
nell'eseguibile c'e' lo stesso e allora tanto vale che ce lo metto io, cosi'
so che c'e' e sopratutto so cosa c'e'. Poi, ovvio, c'e' caso e caso, ma in
genere non e' male sapere cosa c'e' dietro le quinte del proprio eseguibile.
Luca