Stavo passando per l'argomento di associatività degli operatori C.Associatività dell'operatore di chiamata di funzione in C
Lì mi sono imbattuto in questo fatto che l'operatore di chiamata di funzione ()
ha un'associatività da sinistra a destra. Ma l'associatività viene in gioco solo quando più operatori della stessa precedenza si verificano in un'espressione. Ma non sono riuscito a trovare alcun esempio che coinvolge l'operatore di chiamata di funzione in cui l'associatività svolge un ruolo cruciale.
Ad esempio nella dichiarazione a = f(x) + g(x);
, il risultato dipende dall'ordine di valutazione e non dall'associatività delle due chiamate di funzione. Analogamente la chiamata f(g(x))
valuterà prima la funzione g()
e poi la funzione f()
. Qui abbiamo una chiamata di funzione nidificata e ancora l'associatività non svolge alcun ruolo.
Gli altri operatori C in questo gruppo di priorità sono l'indice di serie []
, postfix ++
e postfix --
. Ma non sono riuscito a trovare esempi che coinvolgessero una combinazione di questi operatori con ()
in cui l'associatività gioca un ruolo nella valutazione dell'espressione.
Quindi la mia domanda è l'associatività della chiamata di funzione definita come da sinistra a destra interessa qualsiasi espressione in C? Qualcuno può fornire un esempio in cui l'associatività dell'operatore di chiamata di funzione ()
è importante nella valutazione delle espressioni?
Cosa succede se 'f' è un'espressione in sé (come un puntatore a funzione selezionato da un array)? – EOF
Qualsiasi funzione che restituisce un puntatore a una funzione può essere utilizzata come esempio, poiché la funzione di dereferenziazione del puntatore non è necessaria con l'operatore di chiamata di funzione. Quindi inizi ad avere cose come 'f()()()()' ed è valido C. Vedi la risposta di Grzegorz per un possibile esempio. –
28 upvotes .... Deve essere lasciato a destra. Vorresti vivere in un mondo in cui 'f (a) (b)' era una chiamata a 'f' passando a' b', quindi chiamando il risultato con 'a' (vale a dire' (f (b)) (a) ') - vuoi? –