PDA

Visualizza la versione completa : [C] Overload operatori in C


gygabyte017
01-05-2010, 15:21
Ciao a tutti, sto facendo un progetto che devo necessariamente scrivere in C, ma mi farebbe molto comodo ridefinire le 4 operazioni...
Il mio programma prevede le quattro funzioni Sum Dif Mul Div (che prendono in input due strutture e restituiscono in output una struttura), che ho implementato.

Se dovessi scrivere però tipo 4 + 5 - 6 * 7 / 8, già una cosa semplicissima come questa diventerebbe una concatenazione di 5 funzioni una dentro l'altra, abbastanza illeggibile :dhò: ...

C'è un modo in C per ridefinire i simboli +-*/ magari usando qualche "trucco", io avevo provato a fare qualcosa con il #define, tipo chiamare il più "A+" e scrivere 4 A+ 5, ma il problema principale è l'ordine delle operazioni....

C'è niente di furbo (anche se brutto) che ci si può inventare per scrivere qualcosa tipo:
5 <qualcosa> 6
e trasformarla in automatico in Sum(5, 6)
???

Grazie!

oregon
01-05-2010, 15:38
No ho capito bene il problema ... in ogni caso, in C non puoi ridefinire gli operatori ... devi usare il C++ ...

gygabyte017
01-05-2010, 15:53
Eh magari, ma devo usare il C...

Rispiego il problema: ho creato le 4 funzioni Sum Dif Mul Div che fanno dei conti diversi rispetto a + - * /

Nel programma, devo usare le mie funzioni e non + - * /

Però, se per esempio dovessi fare 5 + 6 - 7 * 8, scritto così è semplice, ma io dovrei scrivere
Sum(5, Dif(6, Mul(7, 8))) che è lungo da scrivere e anche non molto leggibile...

Mi chiedevo se si potesse creare a mano uno stratagemma, usando magari il preprocessore, per fare una cosa simile all'overload del c++, per evitare questo. pensavo di inventare dei simboli (tipo non so una X) e usarli per simboleggiare le operazioni.

In altre parole vorrei istruire il preprocessore in modo che mi trasformi, ad esempio, questo codice:
5 X 6
in
Mul(5, 6)

Potrei definire #define X Mul, ma il problema principale è che la funzione è del tipo "FUNZIONE ARGOMENTO ARGOMENTO" mentre la X, che è quello che vorrei, è "ARGOMENTO FUNZIONE ARGOMENTO", quindi non so come fare.

La domanda è quindi, esistono dei #define (o simili) intelligenti, in modo che:

dato ad esempio il codice:
double y = 3 SOMMA 4 X 2;

il preprocessore lo trasformi in:
double y = Sum(3, Mul(4, 2));

?

Grazie (lo so è una richiesta strana, ma devo per forza usare il C, ma non ho voglia di scrivere righe e righe di codice solo per fare le 4 operazioni...quindi mi chiedevo se ci fosse una scappatoia...)

oregon
01-05-2010, 16:00
Ma tu cosa devi scrivere? Un parser di espressioni ?

gygabyte017
01-05-2010, 16:20
No, è un compito per l'università in cui devo fare dei calcoli per risolvere un problema matematico usando non i numeri normali, ma l'aritmetica degli intervalli, cioè che ogni operazione non è

+: numero x numero -> numero

ma è

+: intervallo x intervallo -> intervallo

quindi ho definito la struct "intervallo" e le 4 funzioni per fare le operazioni sugli intervalli....

Se stessi in c++ sarebbe tutto una bella classe con i suoi membri e le sue operazioni, ma non si può fare...

Loading