Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Nuova Dacia Spring, del modello precedente resta solo il nome: più grande, più efficiente e ora prodotta in Europa
Nuova Dacia Spring, del modello precedente resta solo il nome: più grande, più efficiente e ora prodotta in Europa
La seconda generazione della citycar elettrica di Dacia passa alla piattaforma RGEV small di Renault Group, cresce di 15 cm in lunghezza e 18 cm in larghezza, adotta un motore da 80 CV e una batteria LFP da 27,5 kWh per 250 km WLTP. Prezzi da 17.900 euro, produzione a Novo Mesto in Slovenia.
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX ha portato sul mercato Picco, un e-reader da 3,97 pollici che pesa 58 grammi e si aggancia al retro dello smartphone con un anello magnetico. Lo abbiamo usato con Pixel 11 Pro XL e iPhone 18 Pro per capire se un formato così ridotto regga la prova della lettura quotidiana
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
A Las Vegas AMD ha svelato i dettagli architetturali delle CPU EPYC di sesta generazione, note con il nome in codice Venice. Nuovi core Zen 6 e Zen 6c costruiti a 2 nanometri, fino a 256 core per socket, 16 canali di memoria, interfaccia PCI Express 6.0 e un'intera famiglia di proposte che va da Venice SP7 a Verano. Senza dimenticare la memoria, oggi la voce di costo più pesante in un server: AMD risponde con CXL 3.1 e con la tecnologia software MEXT, che porta la memoria flash dentro la gerarchia della DRAM.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-04-2003, 12:12   #1
mjk
Member
 
Iscritto dal: Mar 2002
Messaggi: 153
[C] Numero variabile di argomenti

Ciao a tutti, ho un problema di "eleganza formale" in C (non C++, badate bene). Devo scrivere una sorta di API, e ho tre funzioni praticamente uguali a meno del numero di parametri che devono prendere:

void f1(double x);
void f2(double x, unsigned y);
void f3(double x, unsigned y, double z);

f1 non è che f2 con y = 0, e f2 è f3 con z qualsiasi.

Voglio "consensarle" in un'unica funzione per semplificare la vita a chi dovrà usare queste funzioni. In C++ penso che avrei potuto usare:

void f(double x, unsigned y = 0, double z = 0.0);

In C ho fatto:

#include <stdarg.h>

void f(double x, ...) {
va_start(ap, x);
y = va_arg(ap, unsigned);
z = va_arg(ap,double);
va_end(ap);
etc...
}

Il problema è che se la chiamo con (a è un double)

f(a);

y e z assumono un valore qualsiasi! Io voglio accorgermi se y non è stato passato e in tale caso porre y = 0.

P.S.: soluzione indesiderata il passaggio, come primo argomento, del numero di argomenti che si passano: in tale caso tanto vale usare tre funzioni diverse f1,f2,f3.

Scusate per il post lungo e per la domanda assurda.
Ciao e grazie,

::mjk::
mjk è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2003, 12:29   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Sinceramente non l'ho mai usate, ma credo che basti controllare se ap == NULL...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2003, 14:13   #3
mjk
Member
 
Iscritto dal: Mar 2002
Messaggi: 153
Grazie del consiglio, ho provato ma non funziona. Dopo aver dichiarato, con va_start, qual'è l'ultimo argomento "certo", ap punta alla locazione di memoria immediatamente successiva, non curandosi se in essa sono scritti o meno gli argomenti opzionali. Mi sa che non c'è alcun metodo per effettuare l'operazione che voglio io...
mjk è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2003, 14:22   #4
/\/\@®¢Ø
Bannato
 
L'Avatar di /\/\@®¢Ø
 
Iscritto dal: Jul 2000
Città: Malo (VI)
Messaggi: 1000
Re: [C] Numero variabile di argomenti

Quote:
Originally posted by "mjk"


Il problema è che se la chiamo con (a è un double)

f(a);

y e z assumono un valore qualsiasi! Io voglio accorgermi se y non è stato passato e in tale caso porre y = 0.
Se non ricordo male non hai modo di capire direttamente quanti e quali argomenti sono stati passati. E' tuo compito stabilirlo (ad esempio le funzioni di output del C guardano la stringa per inferire i parametri passati ).

Secondo me se ti interessa solo l'eleganza , e' meglio se ti tieni le tre funzioni separate. Risultera' anche piu' semplice l'utilizzo da parte dell'utente visto che gli eviterai errori subdoli (ad esempio se chiami la funzione con secondo e terzo parametro scambiati il compilatore non se ne accorge)
/\/\@®¢Ø è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2003, 14:54   #5
mjk
Member
 
Iscritto dal: Mar 2002
Messaggi: 153
Mi sa che hai proprio ragione... grazie mille a tutti!

bye,

::mjk::
mjk è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Nuova Dacia Spring, del modello precedente resta solo il nome: più grande, più efficiente e ora prodotta in Europa Nuova Dacia Spring, del modello precedente resta...
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone BOOX Picco: l'ebook reader minuscolo è un...
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria AMD EPYC Venice: dentro Zen 6, i SoC a 256 core ...
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro HONOR Pad X9 Max recensione, schermo ultra large...
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
AMD corre ai ripari: un aggiornamento Ra...
Jensen Huang, spunta una terza relazione...
Chi può sostituire Jensen Huang a...
Rilasciati i primi dati raccolti dal tel...
Leica M-A Hammertone e Leica M11-P Hamme...
L'IA non sostituisce la creatività...
Anche Formula E cambia il calendario per...
Defender contro BYD Ti 7: il giudice d&a...
32GB di RAM DDR4 a un prezzo sorprendent...
La nuova lavagna interattiva di LG arriv...
Lo smartphone Samsung passa da 16:9 a 21...
OPPO Pad 5 Pro arriva in Italia: display...
80 TOPS in un palmo di mano: il nuovo Mi...
Motorola Razr Flex: il pieghevole che sf...
NVIDIA, Jensen Huang lascia dopo lo scan...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 07:07.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v