Bagikan melalui


Efek Samping

Urutan evaluasi ekspresi didefinisikan oleh implementasi tertentu, kecuali ketika bahasa menjamin urutan evaluasi tertentu (sebagaimana diuraikan dalam Prioritas dan Urutan Evaluasi). Misalnya, efek samping terjadi dalam panggilan fungsi berikut:

add( i + 1, i = j + 2 );
myproc( getc(), getc() );

Argumen panggilan fungsi dapat dievaluasi dalam urutan apa pun. Ekspresi i + 1 dapat dievaluasi sebelum i = j + 2, atau i = j + 2 dapat dievaluasi sebelum i + 1. Hasilnya berbeda dalam setiap kasus. Demikian juga, tidak mungkin untuk menjamin karakter apa yang sebenarnya diteruskan ke myproc. Karena operasi kenaikan dan penurunan unary melibatkan penugasan, operasi tersebut dapat menyebabkan efek samping, seperti yang ditunjukkan dalam contoh berikut:

x[i] = i++;

Dalam contoh ini, nilai x yang dimodifikasi tidak dapat diprediksi. Nilai subskrip bisa berupa nilai baru atau lama darii. Hasilnya dapat bervariasi di bawah kompiler yang berbeda atau tingkat pengoptimalan yang berbeda.

Karena C tidak menentukan urutan evaluasi efek samping, kedua metode evaluasi yang dibahas di atas sudah benar dan dapat diimplementasikan. Untuk memastikan bahwa kode Anda portabel dan jelas, hindari pernyataan yang bergantung pada urutan evaluasi tertentu untuk efek samping.

Lihat juga

Evaluasi Ekspresi