Langsung ke konten utama

Titik Sekuensial pada Bahasa C

Artikel ini akan menjelaskan pengertian titik sekuensial pada bahasa pemrograman C. Sebelum lanjut, perkirakan hasil output dari beberapa program berikut.

PROGRAM 1 

#include <stdio.h> 

 

int f1() { printf ("makan");

return 1;} 

 

int f2() { 

printf ("nasipadang"); 

return 1;} 

 

int main() 

int p = f1() + f2(); 

 

return 0

}


PROGRAM 2 

#include <stdio.h>

 

int x = 20

int f1() { x = x+10

return x;} 

int f2() { x = x-5

return x;} 

 

int main() 

int p = f1() + f2(); 

printf ("p = %d", p); 

 

return 0

}


PROGRAM 3

#include <stdio.h>

 

int main() 

int i = 8

int p = i++*i++; 

printf("%d\n", p); 

}


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 "makannasipadang" atau "nasipadangmakan". 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 yang dikompilasi tersebut. Contoh, pada PROGRAM 2, nilai akhir dari p adalah ambigu. Bergantung 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 dari program tersebut 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 "makannasipadang" pada semua jenis kompilator atau mesin apapun.

// Mengikuti bentuk 3 baris umum pada contoh program sebelumnya
#include <stdio.h> 
int f1() { printf ("makan"); return 1;} 
int f2() { printf ("nasipadang"); return 1;} 

PROGRAM 4

int main() 

// Karena tanda '&&'

// didefinisikan sebagai titik

// sekuensial setelah operand

// pertama, maka hal tersebut

// dapat menjamin bahwa f1()

// dapat diselesaikan.

int p = f1() && f2(); 

 

return 0

}


PROGRAM 5

int main() 

// Karena operator ','

// didefinisikan sebagai titik

// sekuensial setelah operand

// pertama, maka hal ini dapat

// menjamin bahwa f1() dapat

// dieksekusi terlebih dahulu.

int p = (f1(), f2()); 

 

return 0

}


PROGRAM 6 

int main() 

// Karena operator '?'

// didefinisikan sebagai titik

// sekuensial setelah operand

// pertama, maka hal ini dapat

// menjamin bahwa f1() akan

// dieksekusi terlebih dahulu.

int p = f1()? f2(): 3

 

return 0

}


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.

Komentar

  1. Apa yang dimaksud dengan sequence pada bahasa pemrograman C?

    BalasHapus
    Balasan
    1. Titik sekuensial Sequence point pada bahasa pemrograman C, menjamin bahwa program ersebut akan mendapatkan segala efek samping atau dampak dari evaluasi sebelumnya, dan tidak akan menerima efek samping dari program selanjutnya.

      Hapus
  2. Apakah materi ini termasuk dalam undefined behavior pada bahasa pemrograman C?

    BalasHapus
    Balasan
    1. Tidak ada yang dimaksud dengan perilaku tidak terdefinisi atau undefined behavior pada bahasa Pemrograman C. Bahasa C hanyalah bahasa pemrograman dan hanya merupakan antarmuka biasa antara komputer dan user. Bahasa C hanya melakukan apapun yang diketikkan oleh seorang user.

      Hapus
    2. Apa yang terjadi pada kondisi yang dijelaskan pada artikel sebelumnya hanyalah bentuk kesalahan dalam penulisan program, just that!

      Hapus

Posting Komentar

Respon komentar 7 x 24 jam, so please be patient :D