Lompat ke konten Lompat ke sidebar Lompat ke footer

Standar Pemrograman Bahasa C

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


Sebelum mempelajari materi tentang Standar Pemrograman Bahasa C, terlebih dahulu pelajari materi tentang: Sejarah dan Keunggulan Bahasa C, Menggabungkan Dua File Bahasa C Menjadi Satu File Baru, dan Mencetak File Bahasa C Beserta Penjelasannya.

Contoh, perhatikan kode bahasa C sederhana berikut: 

Sintak: 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.

Contoh:

/* 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

Hasil Kompilasi Program Yang Benar dari Program Sebelumnya

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.

Baca Juga:

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.

Standar Pemrograman Bahasa C

Bahasa C, sebagai salah satu bahasa pemrograman paling berpengaruh dalam sejarah, memiliki standar pemrograman yang telah menjadi pedoman bagi para pengembang dalam menulis kode yang konsisten dan mudah dipahami. Standar pemrograman ini tidak hanya membantu dalam memastikan portabilitas kode antar platform, tetapi juga mendukung kolaborasi dan pemeliharaan yang efisien. Dalam artikel ini, akan dipelajari tentang standar-standar pemrograman Bahasa C yang paling terkenal dan signifikan.
  • ANSI C (C89/C90): Standar ANSI C, atau yang dikenal sebagai C89 atau C90, adalah standar pertama yang dikeluarkan oleh American National Standards Institute (ANSI) pada tahun 1989 (C89) dan diperbarui pada tahun 1990 (C90). Standar ini mendefinisikan aturan-aturan dalam penulisan kode, pengelolaan memori, dan berbagai fitur lainnya. ANSI C membawa kemudahan portabilitas dan memastikan bahwa kode yang ditulis sesuai dengan standar ini dapat dijalankan di berbagai platform.
  • C99: Diperkenalkan pada tahun 1999, C99 membawa sejumlah perubahan dan penambahan fitur signifikan ke dalam Bahasa C. Standar ini menyediakan dukungan yang lebih baik untuk komentar, inisialisasi variabel, tipe data baru seperti long long int, dan fungsi-fungsi baru seperti inline. C99 memberikan kebebasan yang lebih besar kepada para pengembang dengan menyediakan fitur-fitur modern untuk meningkatkan ekspresivitas dan kenyamanan dalam penulisan kode.
  • C11: C11, atau ISO/IEC 9899:2011, adalah standar terbaru yang dikeluarkan pada tahun 2011. Standar ini membawa lebih banyak perubahan signifikan, termasuk pembaruan pada tipe data kompleks, penanganan thread, Atomic Operations, dan penyempurnaan lainnya. C11 menambahkan fitur Multithreading Support yang memungkinkan pengembang untuk lebih efisien menangani pemrograman paralel.
  • MISRA C: Meskipun bukan standar resmi Bahasa C, MISRA C (Motor Industry Software Reliability Association) memberikan panduan dan aturan pemrograman yang ketat, terutama digunakan dalam pengembangan perangkat lunak untuk industri otomotif. MISRA C bertujuan untuk meningkatkan keamanan dan kehandalan perangkat lunak dalam lingkungan yang memerlukan tingkat keamanan tinggi.
  • POSIX (Portable Operating System Interface): POSIX bukan standar Bahasa C secara khusus, tetapi seringkali dihubungkan dengan pengembangan perangkat lunak di lingkungan Unix dan Unix-like. POSIX menyediakan antarmuka standar untuk interaksi dengan sistem operasi, dan penggunaan standar ini seringkali bersamaan dengan Bahasa C untuk memastikan portabilitas lintas platform.

Standar pemrograman Bahasa C memberikan sejumlah keunggulan yang mendorong praktik pemrograman yang konsisten, portabel, dan aman. Berikut adalah beberapa keunggulan dari penerapan standar pemrograman Bahasa C:
  • Konsistensi Kode: Standar pemrograman Bahasa C menetapkan aturan dan konvensi penulisan kode yang konsisten. Hal ini memungkinkan para pengembang untuk membuat kode yang lebih mudah dipahami oleh orang lain dan oleh diri pengembang itu sendiri pada masa depan. Konsistensi kode menjadi kunci dalam kolaborasi tim pengembang dan memfasilitasi pemeliharaan kode yang lebih efisien.
  • Portabilitas: Salah satu keunggulan utama standar pemrograman Bahasa C adalah meningkatkan portabilitas kode. Kode yang ditulis sesuai dengan standar dapat dijalankan di berbagai platform tanpa modifikasi yang signifikan. Hal ini membantu mengurangi kompleksitas dalam pengembangan perangkat lunak, terutama dalam lingkungan yang melibatkan berbagai sistem operasi atau arsitektur perangkat keras.
  • Keamanan: Standar pemrograman membantu dalam mengatasi masalah keamanan perangkat lunak dengan menetapkan pedoman dan aturan tertentu. Sebagai contoh, standar seperti MISRA C menyediakan pedoman ketat yang berfokus pada keamanan dan keandalan perangkat lunak, khususnya dalam konteks industri seperti otomotif. Penerapan standar semacam ini dapat membantu mencegah kesalahan pemrograman yang dapat menyebabkan kerentanan keamanan.
  • Kemudahan Pemeliharaan: Dengan adanya standar, pemeliharaan kode menjadi lebih mudah dilakukan. Para pengembang yang memahami standar pemrograman dapat dengan cepat membaca, memahami, dan memodifikasi kode yang ditulis oleh orang lain. Ini mengurangi waktu yang diperlukan untuk pemecahan masalah, peningkatan, atau pengoptimalan kode.
  • Kompatibilitas dengan Standar Perangkat Keras dan Sistem Operasi: Standar pemrograman Bahasa C memastikan bahwa kode yang ditulis dapat berintegrasi dengan baik dengan berbagai perangkat keras dan sistem operasi. Ini sangat penting dalam pengembangan perangkat lunak yang harus berjalan di berbagai platform atau perangkat.
  • Peningkatan Kualitas Kode: Penerapan standar pemrograman secara konsisten dapat membantu meningkatkan kualitas keseluruhan dari kode yang dihasilkan. Hal ini mencakup aspek-aspek seperti struktur kode yang baik, penanganan kesalahan yang efektif, dan manajemen memori yang aman.

Penerapan standar pemrograman Bahasa C memberikan sejumlah keunggulan yang penting dalam pengembangan perangkat lunak. Dengan mengikuti pedoman-pedoman ini, para pengembang dapat menciptakan kode yang konsisten, portabel, aman, dan mudah pemeliharaannya. Sebagai pengembang, memahamkan pada pentingnya standar pemrograman akan membekali individu tersebut dengan keterampilan yang esensial dalam dunia pengembangan perangkat lunak.

Kesimpulan

Standar-standar pemrograman Bahasa C menciptakan fondasi yang kokoh bagi pengembangan perangkat lunak. Menerapkan standar ini tidak hanya memastikan konsistensi dalam kode tetapi juga meningkatkan kemudahan pemeliharaan dan portabilitas. Memperkenalkan pengembang pada standar-standar ini akan membantu dalam memahami pentingnya penulisan kode yang baik dan mendukung praktik pemrograman yang efisien.

22 komentar untuk "Standar Pemrograman Bahasa C"

  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. Mengapa hasil yang diberikan pada setiap kompilator berbeda-beda?

    BalasHapus
    Balasan
    1. Bergandung pada standar bahasa c yang digunakan pada setiap kompilator.

      Hapus
  6. Bisa lebih dijelaskan mengenai konsep argc dan argv pada bahasa C?

    BalasHapus
    Balasan
    1. int main(int argc, char *argv[]) digunakan untuk argumen baris perintah dimana argc merupakan singkatan dari jumlah argumen dan argv vector argumen yang menunjuk pada alamat argumen yang dilewatkan, argc dan argv dapat berupa identifer valid apapun.

      Hapus
  7. Secara umum aturan apa yang harus diikuti untuk memecahkan kode program berikut jika pertanyaan yang ditanyakan dalam suatu tes muncul pertanyaan demikian?

    #include
    int main()
    {
    int i = 1;
    printf("%d %d %d\n", i++, i++, i);
    return 0;
    }

    Mohon Penjelasannya.

    BalasHapus
    Balasan
    1. 2 1 3 - menggunakan g++ 4.2.1 pada Linux.i686
      1 2 3 - menggunakan SunStudio C++ 5.9 pada Linux.i686
      2 1 3 - menggunakan g++ 4.2.1 pada SunOS.x86pc
      1 2 3 - menggunakan SunStudio C++ 5.9 pada SunOS.x86pc
      1 2 3 - menggunakan g++ 4.2.1 pada SunOS.sun4u
      1 2 3 - menggunakan SunStudio C++ 5.9 pada SunOS.sun4u

      they'll be impressed.

      Hapus
  8. Saya kurang paham kenapa output yang dihasilkan adalah 2 1 3?

    BalasHapus
    Balasan
    1. Karena program bekerja dengan ukuran eksekusi prioritas, secara umum kompilator bekerja untuk mengeksekusi program dari kanan ke kiri, namun jika kedua operator bernilai sama dan memiliki operator ++, -- yang sama, maka operator kemudian akan bekerja dari kanan ke kiri tetapi dengan memprioritaskan operator dengan prioritas lebih tinggi terlebih dahulu yaitu ++.

      #include
      int main()
      {
      int i = 1;
      printf("%d\n", i++);
      printf("%d\n", ++i);
      printf("%d\n", i++);
      printf("%d\n", i);
      printf("%d\n", i--);
      printf("%d\n", --i);
      printf("%d\n", i);
      i=i+5;
      printf("%d %d %d\n", i--, i++, ++i);
      printf("%d %d %d\n", i++, i++, i);
      printf("%d %d %d\n", i++, i, i++);
      printf("%d %d %d\n", i++, i++, i++);
      printf("%d %d %d\n", i, i++, i++);
      printf("%d %d %d\n", i--, i, i--);
      printf("%d %d %d\n", i--, i--, i);
      printf("%d %d %d\n", i, i--, i--);

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

      Hapus
    2. Karena argumen fungsi yang dievaluasi tidak ditentukan urutannya. Maka printf("%d %d %d", i++, i++ ,i); dapat mengikuti aturan urutan sebagai berikut, dimana i tengah pertama dievaluasi terlebih dahulu sehingga nilai tengah adalah 1, tetapi karena nilai i bertambah, yaitu, i=2, maka kode paling kiri berikutnya akan dievaluasi dan nilai 2 akan dicetak, dan selanjutnya bertambah menjadi 3, dan selanjutnya baris kode program yang paling kanan akan dicetak.

      Catatan: kompilator yang berbeda dapat mengikuti urutan apapun atau bahkan urutan acak untuk evaluasi argumen fungsi pada bahasa C.

      Hapus
  9. int i=1;
    printf("%d %d %d %d %d", i, ++i, i++,++i);
    Program tersebut memberikan saya hasil output: -4 4 2 4
    Ada yang bisa bantu jelaskan kenapa hasilnya demikian?

    BalasHapus
    Balasan
    1. Sesuai dengan standar bahasa C, urutan evaluasi argumen pada suatu fungsi tidak dapat ditentukan. Artinya argumen apapun dapat dipilih secara acak untuk dilakukan evaluasi. Juga, hal ini bergantung pada jenis kompilator yang digunakan.

      Karena bahasa program yang digunakan adalah bahasa C, maka harus dihindari penggunaan konstruksi pemrograman yang perilakunya tidak dapat ditentukan atau tidak dapat diprediksi, program semacam ini harus selalu dihindari penggunannya karena hasil output yang muncul dapat berbeda jika menggunakan jenis kompilator yang berbeda pula.

      Untuk contoh program tersebut selain menggunakan kompilator gcc menurut saya hasil yang akan dikeluarkan adalah 2 1 3.

      Hapus
  10. Apa perbedaan antara while loop dan do while loop pada bahasa C?

    BalasHapus
    Balasan
    1. Pada bahasa C while loop, kondisi diperiksa terlebih dahulu dan loop kemudian dieksekusi. Sedangkan pada do while loop, proses loop dieksekusi terlebih dahulu kemudian kondisi while diperiksa.

      Hapus
  11. Ada yang bisa bantu saya untuk memahami materi pada artikel ini....

    BalasHapus
    Balasan
    1. Pada artikel ini dijelaskan beberapa standar pada bahasa C, atau lebih tepatnya beberapa aturan. Dari aturan standar tersebut, beberapa kompilator kemudian mengikuti aturan atau perintah eksekusi suatu program, namun pada beberapa kompilator lain ternyata aturan tersebut tidak benar-benar diikuti sehingga hasil yang ditampilkan berbeda seperti yang dijelaskan pada contoh.

      Kesimpulan, hasil atau output yang akan ditampilkan dapat berbeda-beda sesuai dengan jenis kompilator yang digunakan. trima kasih.

      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 -