Minggu, Mei 03, 2020

Titik sekuensial pada bahasa C

Perkirakan hasil output dari beberapa program berikut.

PROGRAM 1 

PROGRAM 2 

PROGRAM 3

Output dari beberapa program sebelumnya adalah tidak teridentifikasi dan tidak terspesifikasi. Output mungkin memiliki hasil berbeda terhadap kompilator yang berbeda serta tipe mesin yang berbeda. Hal ini sama seperti mempertanyakan nilai dari variabel otomatis yang tidak terdefinisi.

Alasan tidak terdefinisi untuk PROGRAM 1 adalah operator '+' tidak memiliki standar definisi dari evaluasi untuk operand. Baik itu f1() atau f2() yang akan dieksekusi pertama kali. Sehingga output mungkin akan menghasilkan "GeeksforGeeks" atau "forGeeksGeeks". Sama halnya dengan operator '+', kebanyakan dari operator dengan jenis sama seperti '-', '/', '*', Bitwise AND &, Bitwise OR I, dan operator yang lainnya tidak memiliki definisi standar perintah untuk evaluasi terhadap operand-nya masing-masing.

Evaluasi dari ekspresi juga dapat menimbulkan dampak terhadap program. Contoh, pada PROGRAM 2, nilai akhir dari p adalah ambigu. Tergantung pada perintah ekspresi evaluasi, jika f1() dieksekusi pertama, maka nilai dari p adalah 55, namun jika sebaliknya maka nilai p adalah 40.

Output dari program 3 juga bersifat tidak terdefinisi. Bisa jadi hasil output yang dikeluarkan adalah 64, 72, atau berupa output dengan nilai keluaran yang lain. Ekspresi i++ juga menyebabkan efek samping terhadap program, dimana ekspresi tersebut dapat mengubah nilai yang mengarah kepada nilai tidak terdefinisi dimana i juga merupakan referensi ditempat lain dengan bentuk ekspresi yang sama. 

Tidak seperti beberapa contoh kasus sebelumnya, pada titik tertentu dalam proses eksekusi sekuensial yang disebut sequence points, semua efek yang dialami pada program sebelumnya dijamin tidak akan terjadi. Titik sekuensial mendefinisikan titik apapun pada eksekusi program komputer yang menjamin segala macam evaluasi sebelumnya akan dapat dilaksanakan dengan baik, dan tidak terdapat efek samping dari evaluasi subsekuen yang akan terjadi. Berikut adalah sequence point pada bahasa C:

Pada akhir dari operand pertama diikuti oleh operator:
satu, logika AND &&
dua, logika OR ||
tiga, logika kondisional ?
empat, tanda koma ,

Contoh, output dari program berikut ini dijamin akan menghasilkan "GeeksforGeeks" pada semua jenis kompilator ataupun mesin.

// Following 3 lines are common in all of the below programs 
#include <stdio.h> 
int f1() { printf ("Geeks"); return 1;} 
int f2() { printf ("forGeeks"); return 1;} 

PROGRAM 4 

PROGRAM 5 

PROGRAM 6 


Pada bagian akhir dari semua ekspresi. Kategori tersebut mencakup statement ekspresi berikut.
satu, Setiap akhir ekspresi selalu diakhiri dengan semicolon seperti "a=b;".
dua, Statement return.
tiga, Ekspresi kontrol dari if, switch, while, atau do-while statement.
empat, Segala ekspresi berada dalam statement for.





Related Posts

Titik sekuensial pada bahasa C
Oleh

"semoga yang memberikan komentar diberikan berkah kebaikan dari Allah, dijauhkan dari kejahatan, dan diberikan pahala ilmu dan amal jariyah dari sepenggal kata yang ia tinggalkan amiin :) "