Sto solo imparando un po 'di C, o meglio, ho un'idea di alcuni dettagli arcani. E stavo usando VTC avanzata di programmazione C, in cui ho scoperto che i punti di sequenza sono:Punti sequenza in chiamate C/funzione
- virgola
- Comma
- e/o
- operatore ternario
- chiamate funzione logica (Qualsiasi espressione usata come argomento per una chiamata di funzione è finalizzato viene effettuata la chiamata)
sono tutti corretti ?. Per quanto riguarda l'ultimo che ho provato:
void foo (int bar) { printf("I received %d\n", bar); }
int main(void)
{
int i = 0;
foo(i++);
return 0;
}
Ed ha ancora stampare 1, che secondo quanto ragazzo del VTC detto e se mi undertood correttamente, dovrebbe, giusto?. Inoltre, questi paren nella funzione chiamano lo stesso dei parents di raggruppamento? (Voglio dire, la loro precedenza). Forse è perché i parenti hanno precedenza più alta di ++ ma ho anche provato foo ((i ++)); e ho ottenuto lo stesso risultato. Solo facendo pippo (i = i + 1); ceduto 1.
Grazie in anticipo. Per favore, considera che io vengo dal Sud America, quindi se non fossi chiaro o non avesse senso per favore, per favore, dimmi.
Cordiali saluti, Sebastian.
Compilare con le informazioni di debug e tutti gli avvisi (ad esempio 'gcc -Wall -g' su Linux o forse Mac) e imparare a usare il debugger (' gdb') –
È difficile capire perché pensi che dovrebbe stampare 1 quando il il valore di 'i ++' è 0. "Solo facendo foo (i = i + 1); restituito 1" - perché il valore di 'i = i + 1', che è equivalente a' ++ i', è 1. –
Conosco il valore di i ==, ma penso che le chiamate di funzione non siano realmente un punto di sequenza come, ad esempio, la virgola è perché foo ((i ++, i)) è effettivamente 1. E sì, so che la virgola dà l'ultimo valore ma comunque. Mi sono confuso dal fatto che "Qualsiasi espressione viene valutata prima" non è proprio il caso, anche se postfix è come un'operazione a 2 step se qualcuno dice "TUTTE le operazioni" .. beh .. Io pensavo letteralmente ALL ALL – SJPRO