Jumat, November 01, 2019

Standar pemrograman bahasa C

Tujuan dari artikel ini adalah memperkenalkan standarisasi bahasa C.

Apa yang akan dilakukan ketika Program bahasa C dihasilkan dengan hasil berbeda pada dua compiler berbeda?

Contoh, perhatikan kode bahasa C sederhana berikut.

void main() { }

Program berikut akan gagal dijalankan menggunakna gcc dengan return tipe dari fungsi main adalah void, tetapi program tersebut dapat dikompilasi 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 compiler yang berbeda pula.

Output:
2 1 3 - using g++ 4.2.1 on Linux.i686
1 2 3 - using SunStudio C++ 5.9 on Linux.i686
2 1 3 - using g++ 4.2.1 on SunOS.x86pc
1 2 3 - using SunStudio C++ 5.9 on SunOS.x86pc
1 2 3 - using g++ 4.2.1 on SunOS.sun4u
1 2 3 - using 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.

Apakah yang dimaksud standar C?
Standar C versi terbaru adalah ISO/IEC 9899:2011, juga dikenal sebagai C11 yang merupakan final draft yang di-publish pada tahun 2011. Sebelum C11, ada standar lain bernama C99.

Dapatkah diketahui 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 compiler.

Pertimbangkan contoh kedua berikut ini. 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).

Apa yang dilakukan pada program bahasa C yang undefined ataupun unspecified pada standar?
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.





Related Posts

Standar pemrograman 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 :) "