Langsung ke konten utama

Standar Pemrograman Bahasa C

Berikut adalah tindakan yang dilakukan oleh Bahasa C ketika Program bahasa C memberikan hasil yang berbeda dari dua kompilator berbeda.

Contoh, perhatikan kode bahasa C sederhana berikut.

void main() { }

Program berikut akan gagal dijalankan menggunakan gcc dengan return tipe dari fungsi main adalah void, tetapi program tersebut dapat berhasil dikompilasi jika dijalankan pada Turbo C. Bagaimanakah cara menentukan apakah program C dapat dijalankan atau tidak.

Perhatikan program berikut ini sebagai contoh selanjutnya. Hasil dari kode program tersebut akan menghasilkan hasil yang berbeda pada kompilator yang berbeda pula.

/* Standar pemrograman bahasa C */

#include<stdio.h>

int main()

{

int i = 1;

printf("%d %d %d\n", i++, i++, i);

return 0;

}

Output:
2 1 3 - jika menggunakan g++ 4.2.1 on Linux.i686
1 2 3 - jika menggunakan SunStudio C++ 5.9 on Linux.i686
2 1 3 - jika menggunakan g++ 4.2.1 on SunOS.x86pc
1 2 3 - jika menggunakan SunStudio C++ 5.9 on SunOS.x86pc
1 2 3 - jika menggunakan g++ 4.2.1 on SunOS.sun4u
1 2 3 - jika menggunakan SunStudio C++ 5.9 on SunOS.sun4u

Manakah diantara hasil kompilasi sebelumnya yang benar?
Jawabannya adalah tergantung dari standariasai bahasa C yang digunakan. Pada semua kasus dibutuhkan standar C untuk memahami output program yang dihasilkan oleh contoh.

Standar C
Standar C versi terbaru adalah ISO/IEC 9899:2018 (www.iso.org), juga dikenal sebagai C18 yang merupakan final draft yang dipublikasikan pada tahun 2018. Sebelum C18, ada standar lain bernama C11.

Behavior dari semua program dari standar C
Standar C mengeluarkan beberapa behavior dari banyak konstruktur C sebagai undefined dan beberapa sebagai unspecified untuk menyederhanakan spesifikasi dan memungkinkan fleksibilitas dalam implementasi. Contohnya, pada penggunaan bahasa C dari variabel outomatic apapun sebelum menghasilkan inisialisasi behavior undefined dan perintah evaluasi dari sub ekspresi yang tidak spesifik. Hal ini memungkinkan apapun cara yang  paling mudah ataupun paling efisien, seandainya bentuk program tersebut diajukan.



Apakah hasil dari dua contoh sebelumnya?
Dianggap bahwa contoh pertama adalah "void main()", maka standar dari bahasa c menyatakan bahwa:

The function called at program startup is named main. The implementation
declares no prototype for this function. It shall be defined with a return
type of int and with no parameters:
       int main(void) { /* ... */ }
or with two parameters (referred to here as argc and argv, though any names
may be used, as they are local to the function in which they are declared):
       int main(int argc, char *argv[]) { /* ... */ }
or equivalent;10) or in some other implementation-defined manner.

Jadi tipe return void tidak mengikuti standar dan hal ini dimungkinkan pada beberapa kompilator.

Catatan: bahwa statement pada Standar C ditandai sebagai unspesified behavior.

The order in which the function designator, arguments, and
subexpressions within the arguments are evaluated in a function
call (6.5.2.2).

Tindakan yang dilakukan program bahasa C yang undefined ataupun unspecified pada standar C
Sebagai programmer, bukanlah hal yang baik untuk menggunakan konstruksi program yang behavior-nya undefined ataupun unspecified, program seperti itu tidaklah harus digunakan karena hasil keluaran atau output dapat memberikan hasil yang berbeda pada compiler yang berbeda.

Komentar

  1. Maksud dari standar bahasa C itu apa sih sebenernya?

    BalasHapus
    Balasan
    1. Standard C adalah dokumen yang digunakan untuk mengurangi variasi dari implementasi bahasa C antar kompilator yang berbeda. Merupakan dokumen teknis dan ditulis untuk implementasi kompilator. Programmer yang sudah berpengalaman sangat merekomendasikan untuk membaca dokumen standar tersebut, beserta standarisasi bahasa C yang sudah ditetapkan didalamnya. Terdapat beberapa jenis dokumen standar bahasa C, dengan aturan standar impementasinya disebut juga "standar C" atau "ISO C". Mematuhi aturan standar salah satu dokumen bukan berarti tidak bisa dilakukan penambahan implementasi dari standar lain.

      Beberapa contoh dokumen standar C:

      C89: Merupakan dokumen standar C pertama, dipublikasikan oleh American National Srandards Institute atau ANSI pada tahun 1989. Dapat dilakukan pemeriksaan juga terhadap kompilator pendukung dari ANSI C dengan memeriksa definisi dari _ANSI_ macro.

      C90: Standar C89 kemudian diadopsi oleh International Organitation fo Standardization (ISO) pada tahun 1990, yang kemudian dikenal dengan Standar C90.

      C95: Perluasan dari Standar C90 yang dipulikasikan pada tahun 1995. Pada standar ini dilakukan beberapa penambahan fitur seperti grafis dan pendukung multibyte. Juga dapat mendefinisikan macro _STDC_VERSION_ yang dapat diuji untuk mengukur versi dari ISO C pendukung kompilator saat ini.

      C99: Merupakan peningkatand dari Standar C95 seperti penambahan komentar satu baris C++ style, fungsi inline, dan penambahan lainnya dari header.

      C11: Dipublikasikan pada tahun 2011. Pada Standar ini dilakukan beberapa penambahan keyword seperti _Generic dan multi threading API. Juga dilakukan peningkatan pendukung Unicode.

      Hapus
  2. Jadi, standar C itu aslinya cuma dokumen yang dipake sebagai aturan standar untuk menulis atau membuat program dalam bahasa C, gitu

    BalasHapus
  3. Setiap bahasa pemrograman, itu adalah suatu kumpulan aturan sintak yang secara formal dapat dinyatakan sebagai suatu spefisikasi teknik. Namun berbeda dengan bahasa C, dalam sejarahnya aturan pengembangan bahasa C tersebut memiliki beragam gaya pembuatan sintak. Seiring dengan berjalannya waktu, lama kelamaan hal ini malah menimbulkan masalah besar karena kurangnya standarisasi yang menjadi dasar dari dialek bahasa yang ditak kompatibel. Selain itu, bahasa juga perlu ditingkatkan dengan penambahan beberap fitur bahasa baru beserta struktur sintaknya. Hal ini hanya dapat dicapai jika dilakukan pembaruan standar yang sudah ditetapkan, sehingga setiap vendor kompilator tahu bagaimana cara mengimplementasikan fitur-fitur tersebut. Inilah alasan kenapa dikembangkan suatu dokemen Standar C.

    BalasHapus
  4. Saat ini sebenarnya cuma ada satu Standar C, seperti yang dirujuk dalam ISO / IEC 9899:2018. Beberapa programmer ada yang memilih untuk tidak terikat pada aturan standar tersebut, jadi cukup ditulis kode program sesuai dengan target kompilator yang sedang populer. ISO menerbitkan standar C tersebut juga dengan meminta sedikit biaya publikasi.

    Latar belakang sejarah. Sebelum diterbitkannya suatu standar bahasa C seperti sekarang. Beberapa programmer masih ada tetap ada yang menggunakan ANSI C89 atau C99 ketika melakukan pembaruan target kode untuk kompilator tertentu dalam sistem operasi.

    BalasHapus
  5. okehlah, sudah lumayan paham diriku ini,,

    BalasHapus
  6. DAFTAR RUJUKAN

    https://www.iso.org/standard/74528.html

    BalasHapus

Posting Komentar

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