Lompat ke konten Lompat ke sidebar Lompat ke footer

Titik Sekuensial Bahasa C dan Fungsinya

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


Sebelum memahami lebih dalam materi tentang Titik Sekuensial Bahasa C dan Fungsinya, terlebih dahulu pelajari materi tentang: Penjumlahan Tanpa Operator Aritmatika Bahasa C, Perbandingan Bahasa C dan Fungsinya, dan Perbedaan ++*p, *p++, dan *++p pada Bahasa C.

Bahasa pemrograman C, yang dikembangkan oleh Dennis Ritchie pada awal 1970-an di Bell Labs, merupakan bahasa pemrograman yang sangat populer dan berpengaruh. Salah satu konsep penting dalam bahasa C adalah titik sekuensial (sequence point). Titik sekuensial adalah titik dalam eksekusi program di mana semua efek samping operasi sebelumnya dijamin telah selesai, dan tidak ada efek samping dari operasi selanjutnya yang telah dimulai. Memahami konsep ini penting untuk menghindari perilaku tak terduga dalam program C.

Pengertian

Secara umum, titik sekuensial dapat dianggap sebagai batas yang memisahkan dua bagian dari eksekusi program. Di titik ini, semua modifikasi memori (penulisan ke variabel, input/output) dan perhitungan telah selesai dan stabil. Contoh paling umum dari titik sekuensial termasuk akhir dari sebuah pernyataan, dan setelah evaluasi dari operator logika tertentu seperti &&, ||, dan ,.

Contoh Titik Sekuensial

Berikut adalah beberapa contoh di mana titik sekuensial muncul dalam kode C:
  • Akhir dari sebuah pernyataan:
    • int a = 5;
    • a = a + 1; /* Titik sekuensial setelah ini */
    • Di sini, titik sekuensial terjadi setelah eksekusi pernyataan a = a + 1;, memastikan bahwa nilai a telah diperbarui sebelum pernyataan berikutnya dijalankan.
  • Operator logika dan komparasi:
    • if (a > 0 && b < 10) {/* Titik sekuensial setelah evaluasi 'a > 0' dan sebelum 'b < 10' */}
    • Pada kondisi ini, titik sekuensial terjadi setelah evaluasi a > 0 dan sebelum b < 10.
  • Operator koma:
    • int x = (a = 5, b = a + 2); /* Titik sekuensial setelah 'a = 5' dan sebelum 'b = a + 2' */
    • Di sini, titik sekuensial terjadi setelah a = 5 dievaluasi dan sebelum b = a + 2 dievaluasi.

Fungsi Titik Sekuensial

Titik sekuensial berfungsi untuk memastikan bahwa pernyataan dalam program dieksekusi dengan urutan yang dapat diprediksi dan konsisten. Ini sangat penting dalam konteks optimisasi kompilator dan dalam penanganan efek samping seperti penulisan ke memori atau input atau output.
  • Menghindari Undefined Behavior: Salah satu fungsi utama titik sekuensial adalah untuk membantu menghindari perilaku tak terdefinisi (undefined behavior). Sebagai contoh:
    • int i = 0;
    • i = i++ + 1; /* Undefined behavior */
    • Dalam kasus ini, tidak ada titik sekuensial antara evaluasi i++ dan i + 1, yang menyebabkan perilaku tak terdefinisi karena dua modifikasi terjadi pada i dalam pernyataan yang sama tanpa titik sekuensial yang memisahkannya.
  • Memastikan Urutan Eksekusi: kompilator menggunakan titik sekuensial untuk memutuskan urutan eksekusi dari berbagai operasi. Ini memungkinkan optimisasi yang aman tanpa mengubah perilaku program.

Contoh: 

#include <stdio.h> 

 

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

return 1;} 

 

int f2() { 

printf ("nasipadang"); 

return 1;} 

 

int main() 

int p = f1() + f2(); 

 

return 0

}


Contoh: 

#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

}


Contoh:

#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:
  • logika AND &&
  • logika OR ||
  • logika kondisional ?
  • 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;} 

Contoh:

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

}


Contoh:

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

}


Contoh: 

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.
  • Setiap akhir ekspresi selalu diakhiri dengan semicolon seperti "a=b;".
  • Statement return.
  • Ekspresi kontrol dari if, switch, while, atau do-while statement.
  • Segala ekspresi berada dalam statement for.

Kesimpulan

Titik sekuensial adalah konsep penting dalam bahasa pemrograman C yang memastikan urutan eksekusi yang benar dan menghindari perilaku tak terdefinisi. Memahami di mana titik sekuensial terjadi dalam program membantu programmer menulis kode yang lebih aman dan dapat diprediksi. Pengetahuan ini juga membantu dalam debugging dan mengoptimalkan program C. Dengan demikian, menguasai konsep ini adalah langkah penting dalam menjadi seorang programmer C yang kompeten.

Artikel ini didedikasikan kepada: Agung Kumoro Adhi, Akmal Mahardika, Alya Salma Nuriasenda, Anabella Dhara Agusta, dan Atika Intan Putri Azzahra.

5 komentar untuk "Titik Sekuensial Bahasa C dan Fungsinya"

  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

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -