Saya sudah mulai berlatih pemrograman dengan codechef dan bingung dengan perbedaan antara C dan C99. Apa arti C di sini? Apakah C89? Periksa bahasa di bagian bawah kiriman ini . Ini berisi C dan C99.
Saya menemukan di internet sesuatu yang disebut GNU C. Apakah ada C yang berbeda untuk sistem linux / unix? Apakah ini sesuai dengan standar C oleh ANSI? Saya juga telah membaca di beberapa tempat "C99 strict". Apa ini?
Apakah ada standar C lain yang berbeda yang digunakan? Apakah ada yang disebut C 4.3.2 atau versi gcc yang digunakan saat ini?
EDIT:
Ini , Ini , Ini membantu. Saya akan mencari lebih banyak dan mengedit hal-hal yang masih belum terjawab.
Saya bukan pemula pemrograman. Saya tahu apa itu bahasa C. Saya tahu bahwa ada standar C yang berbeda oleh ANSI seperti C89, C99 dan C11.
Jawaban:
Segala sesuatu sebelum standardisasi umumnya disebut "K&R C", setelah buku terkenal itu , dengan Dennis Ritchie, penemu bahasa C, sebagai salah satu penulisnya. Ini adalah "bahasa C" dari 1972-1989.
Standar C pertama dirilis tahun 1989 secara nasional di AS, oleh lembaga standar nasional ANSI. Rilis ini disebut C89 atau ANSI-C. Dari 1989-1990 ini disebut "bahasa C".
Setahun kemudian, standar Amerika diterima secara internasional dan diterbitkan oleh ISO (ISO 9899: 1990). Rilis ini disebut C90. Secara teknis, ini adalah standar yang sama dengan C89 / ANSI-C. Secara resmi, itu menggantikan C89 / ANSI-C, membuatnya usang. Dari 1990-1999, C90 adalah "bahasa C".
Harap dicatat bahwa sejak tahun 1989, ANSI tidak ada hubungannya dengan bahasa C. Pemrogram yang masih berbicara tentang "ANSI C" umumnya tidak tahu apa artinya. ISO "memiliki" bahasa C, melalui standar ISO 9899.
Pembaruan kecil dirilis pada tahun 1995, kadang-kadang disebut sebagai "C95". Ini bukanlah revisi besar, melainkan amandemen teknis yang secara resmi dinamai ISO / IEC 9899: 1990 / Amd.1: 1995. Perubahan utama adalah pengenalan dukungan karakter yang luas.
Pada tahun 1999, standar C mengalami revisi besar (ISO 9899: 1999). Versi standar ini disebut C99. Dari 1999-2011, ini adalah "bahasa C".
Pada tahun 2011, standar C diubah lagi (ISO 9899: 2011). Versi ini disebut C11. Berbagai fitur baru seperti
_Generic
,_Static_assert
dan dukungan utas ditambahkan ke bahasa. Pembaruan memiliki banyak fokus pada multi-core, multi-processing dan pengurutan ekspresi. Dari 2011-2017, ini adalah "bahasa C".Pada 2017, C11 direvisi dan berbagai laporan kerusakan diselesaikan. Standar ini secara informal disebut C17 dan dirilis sebagai ISO 9899: 2018. Tidak ada fitur baru, hanya koreksi. Ini adalah versi bahasa C saat ini.
"C99 strict" kemungkinan mengacu pada pengaturan compiler yang memaksa compiler untuk mengikuti standar melalui surat. Ada istilah implementasi yang sesuai dalam standar C. Pada dasarnya ini berarti: "kompilator ini benar-benar mengimplementasikan bahasa C dengan benar". Program yang menerapkan bahasa C dengan benar secara formal disebut program yang benar- benar sesuai .
"GNU C" bisa berarti dua hal. Baik kompiler C itu sendiri yang datang sebagai bagian dari GNU Compiler Collection (GCC). Atau bisa juga berarti penyiapan default non-standar yang digunakan oleh compiler C GCC. Jika Anda mengkompilasi dengan
gcc program.c
maka Anda tidak mengkompilasi sesuai dengan standar C, melainkan setup GNU non-standar, yang dapat disebut sebagai "GNU C". Misalnya, seluruh kernel Linux dibuat dengan GNU C non-standar, dan bukan C standar.Jika Anda ingin mengkompilasi program Anda sesuai dengan standar C, Anda harus mengetik
gcc -std=c99 -pedantic-errors
. Ganti c99 dengan c11 jika versi GCC Anda mendukungnya.sumber
Saya HARUS menanggapi tentang ANSI C. Meskipun ANSI belum melakukan apa pun dengannya, compiler masih dibangun untuk itu. Kompiler PIC XC16 misalnya: "Kompilator adalah kompilator yang sepenuhnya divalidasi yang sesuai dengan standar ANSI C seperti yang didefinisikan oleh spesifikasi ANSI (ANSI x3.159-1989) dan dijelaskan dalam Bahasa Pemrograman C Kernighan dan Ritchie (edisi kedua). ... "Tidak semua pemrograman untuk komputer" besar "seperti PC. Menulis kompiler untuk biaya perangkat Anda, dan memvalidasi biaya waktu & $. ANSI C hidup & sehat & hidup di perangkat tertanam / real-time Anda.
sumber
ANSI C: Bahasa C pertama distandarisasi oleh badan yang disebut ANSI pada tahun 1989 oleh karena itu disebut c89.
C99:
dengan permintaan dari persyaratan pengembang, pada 1999-2000 kata kunci dan fitur tambahan atau lebih lanjut telah disertakan dalam C99 (mis .: inline, boolean .. Menambahkan fungsi pustaka artematik floating point)
GNU C: GNU adalah sistem operasi mirip unix (www.gnu.org) & di mana proyek GNU membutuhkan bahasa pemrograman C berdasarkan standar ANSI C. GNU menggunakan kompiler GCC (GNU Compiler Collection) untuk mengkompilasi kode. Ini memiliki fungsi perpustakaan C yang mendefinisikan panggilan sistem seperti malloc, calloc, exit ... dll
ANSI C adalah standar yang digunakan oleh atau mengacu pada standar lainnya.
sumber
Selain Jawaban Lundin
Inilah Yang Dikatakan Dennis Richie Saat Ditanyakan
"Mengapa K&R tidak menunggu final, standar ANSI yang disetujui sebelum menulis K&R edisi ke-2?"
sumber
int i; int test(double *p) { i=1; *p=2.0; return i; }
kompiler tidak perlu dimuat ulangi
setelah menulis ke*p
jikap
mungkin menyimpan alamati
. Sangat masuk akal. Masalahnya adalah compiler modern menggunakan aturan yang sama untuk membenarkan asumsi yang menulis ke along*
tidak akan memengaruhi along long
, meskipun kedua jenis memiliki ukuran dan representasi yang sama , dan bahkan jika dua struktur berbagi Common Initial Sequence, kode tidak akan pernah menggunakan penunjuk satu jenis untuk membaca anggota CIS yang ditulis melalui jenis lainnya.Pertanyaan ini tidak benar-benar dicari di internet untuk mendapatkan jawaban, bagaimanapun Anda dapat melihat ini:
-std=c99
yang sudah disebutkan di jawaban lain.sumber
gcc
mendukung-std=c89
dan-std=gnu89
dan-std=c99
dan-std=gnu99
(dan versi yang cukup modern mendukung-std=c11
dan-std=gnu11
). Perbedaannya adalah berkaitan dengan ekstensi di atas Standar C yang tersedia secara otomatis atau hanya jika sumber mendorong kompilator untuk menyediakan makro yang sesuai (seperti-D_XOPEN_SOURCE=700
).