Halo, dan selamat datang kembali.
Dalam kuliah ini, saya hanya ingin membahas beberapa kompiler dan peringatan umum.
Kami berbicara tentang beberapa masalah c umum.
Tetapi kadang-kadang Anda bahkan tidak tahu bahwa Anda memiliki kesalahan itu di program Anda ketika
kompiler mencoba memberi tahu Anda itu.
Kesalahan dan peringatan kompiler cenderung sangat samar bagi pemrogram baru.
Mereka mungkin memberi tahu Anda bahwa Anda kehilangan titik koma, tetapi ia mengatakan akhir pernyataan yang tidak dapat dijangkau.
Dan untuk seseorang yang baru, mereka mungkin bahkan tidak tahu apa artinya itu.
Jadi dibutuhkan banyak latihan dalam menulis banyak kode dan
untuk menguraikan beberapa peringatan kompiler ini dari waktu ke waktu.
Tapi saya ingin memberi tahu Anda sebelum itu.
Jadi beberapa masalah umum yang Anda lihat di kuliah sebelumnya,
saya akan benar-benar menjelaskan beberapa peringatan dan kesalahan kompilator dan apa yang sebenarnya dikatakannya.
Sangat, sangat penting untuk memberi tahu Anda untuk memahami apa yang dikatakan kompiler kepada Anda.
Jika kompiler memberi tahu Anda kesalahan itu, tetapi Anda tidak memahami kesalahan itu,
Anda akan membutuhkan waktu lebih lama untuk memperbaiki kode itu.
Tetapi jika Anda melihat kesalahan dan Anda tahu persis apa yang dikatakannya, Anda dapat
pergi dan memperbaikinya dalam waktu singkat.
Saya ingat, saya akan berada di lab saat pertama kali
memulai pemrograman, dan saya akan
kehilangan titik koma, sesuatu yang sangat umum. Dan kompiler akan memberi tahu saya bahwa saya kehilangan titik
koma, tetapi saya tidak
tahu itu, itu hanya akan mengatakan akhir pernyataan yang tidak dapat dijangkau, dan saya
akan seperti, apa artinya, apa itu pernyataan. Saya akan sangat bingung.
Jadi itulah mengapa saya ingin memberi Anda beberapa tip tentang apa yang sebenarnya coba disampaikan oleh kompiler kepada Anda.
Jadi sangat sulit untuk memahami apa yang dikeluhkan oleh kompiler.
Untuk menguraikan pesan-pesan ini
terkadang sangat membingungkan.
Jadi, Anda perlu memahami kesalahan kompiler ini untuk memperbaikinya, cukup mendasar.
Dan kompiler melakukan setengah pekerjaan untuk Anda.
Ini memeriksa sintaks, memberi tahu Anda apa yang salah, jadi
Anda harus menggunakannya untuk keuntungan Anda.
Tetapi terkadang sulit untuk memahami dengan tepat apa yang dikatakannya terutama jika Anda
baru dan Anda tidak memahami beberapa istilah.
Kompiler membuat keputusan tentang bagaimana menerjemahkan kode Anda yang
belum ditulis oleh programmer dalam kode.
Ini nyaman untuk program dan kompiler, sehingga
dapat ditulis lebih ringkas.
Dan hanya programmer ahli yang memanfaatkan fitur ini.
Jadi yang saya katakan adalah ketika Anda mengkompilasi, Anda
harus selalu menggunakan opsi dasbor dinding.
Ini akan menghidupkan segalanya.
Jadi terkadang fitur yang lebih canggih adalah Anda
benar-benar akan mengeluarkan
beberapa hal, membuat terjemahannya sedikit lebih efisien.
Tetapi ketika Anda
menambahkannya, Anda menyebabkan program dikompilasi secara berbeda.
Dan sebagai hasilnya, Anda mungkin memiliki peringatan dalam kode Anda yang tidak Anda ketahui.
Jadi alasan saya memberitahu Anda bahwa Anda selalu ingin mengkompilasi dengan opsi tertentu,
yang merupakan opsi dasbor dinding.
Dan Anda sebenarnya secara default diaktifkan di blok kode.
Dan ini akan memberi tahu Anda tentang semua kasus di mana
kompiler melakukan hal-hal yang tidak Anda ketahui.
Itu juga akan mengaktifkan semua peringatan,
memberi Anda banyak informasi, itu opsi kompiler yang sangat berguna.
Setelah Anda mengaktifkan opsi itu, Anda dapat mencoba
membantu Anda lebih memahami apa yang dikatakan kompiler kepada Anda.
Jadi kompiler akan menunjukkan kepada Anda
dua jenis masalah. Salah satunya adalah kesalahan.
Ini sebenarnya akan mencegah pembuatan program.
Anda memiliki kesalahan sintaks dan program tidak dapat dikompilasi.
Tidak ada pekerjaan yang
dapat dieksekusi yang dibuat ulang dan. Biasanya, ketika Anda melihat kesalahan dari kompiler, Anda
selalu ingin fokus pada kesalahan pertama itu.
Itu adalah kesalahan yang paling
dapat diandalkan karena beberapa kesalahan lain mungkin merupakan akibat dari kesalahan pertama itu.
Jadi selalu fokus pada kesalahan pertama itu. Perbaiki kesalahan di bagian atas terlebih
dahulu, lalu kompilasi lagi dan lihat apakah kesalahan lainnya hilang.
Peringatan. Peringatan adalah pesan yang ditampilkan
oleh kompiler untuk situasi khusus dan di mana beberapa jenis anomali telah terdeteksi.
Itu adalah kesalahan yang tidak fatal. Jadi executable akan dibuat.
Tapi itu masih sesuatu yang harus Anda perbaiki.
Peringatan ada karena suatu alasan. Anda melakukan sesuatu yang salah
atau dapat menyebabkan masalah di masa mendatang.
Jadi, Anda ingin selalu memperbaiki semua peringatan Anda.
Dan dengan mengkompilasi dengan opsi dasbor
dinding, Anda tidak menganggap program itu benar sampai semua peringatan dihilangkan.
Jadi kompilasi tidak akan gagal. Inilah mengapa saya memberitahu
Anda untuk menggunakan opsi ini serta melihat semua yang terjadi oleh kompilator.
Jadi beberapa pesan kompiler paling umum yang akan Anda temui, dan
ini akan berhubungan langsung dengan beberapa masalah c paling umum
yang kami sebutkan sebelumnya.
Jika variabel tidak dideklarasikan, Anda akan melihat variabel pesan ini dideklarasikan terlebih
dahulu menggunakan fungsi ini.
Ini adalah salah satu yang paling umum dan biasanya lebih mudah dideteksi.
Dan kemudian juga akan menampilkan simbol
sebelum pesan ini.
Ini pada dasarnya akan mengatakan
bahwa Anda mencoba menggunakan variabel ini, tetapi Anda tidak pernah benar-benar mendeklarasikannya.
Kita tahu bahwa ketika Anda mendeklarasikan sebuah variabel, Anda menentukan tipe datanya.
Anda tidak bisa hanya menandatangani data ke variabel yang tidak ada.
Deklarasi fungsi peringatan implisit, ini terkait dengan deklarasi fungsi.
Itu ketika Anda mencoba memanggil suatu fungsi, tetapi jika
fungsi tersebut tidak memiliki implementasi yang terkait. Anda tidak menyertakan tajuk, atau
Anda tidak mendeklarasikannya. Jadi tidak tahu di mana
itu, dan tidak tahu bagaimana fungsi dideklarasikan, tidak tahu argumennya, tidak tahu nilai baliknya.
Tidak memiliki informasi tentang fungsi itu sendiri?
Untuk mengatasi ini, selalu nyatakan prototipe fungsi di atas.
Peringatan lain yang akan mengatakan kontrol peringatan mencapai akhir fungsi yang tidak batal, ini
akan terjadi ketika suatu fungsi telah didefinisikan sebagai mengembalikan hasil yang tidak batal, tetapi
tidak ada pernyataan pengembalian yang disertakan dalam fungsi tersebut.
Jadi Anda lupa mengembalikan data.
Entah fungsi salah didefinisikan di mana Anda harus menghapus tipe
data sebelum deklarasi fungsi, atau Anda lupa
menambahkan pernyataan kembali itu. Salah satu yang lain
harus diubah untuk memperbaiki peringatan ini.
Tapi Anda lihat bagaimana ini adalah peringatan. Anda masih dapat mengkompilasi di
sana, tetapi orang itu benar-benar dapat menyebabkan masalah pemotongan pada program Anda.
Jika Anda mengharapkan suatu fungsi untuk mengembalikan sesuatu dan tidak, maka Anda ingin memperbaiki peringatan
Anda, variabel yang tidak digunakan, peringatan umum lainnya.
Ini dicetak oleh kompiler ketika variabel dideklarasikan, tetapi tidak pernah digunakan.
Anda tidak boleh mendeklarasikan variabel jika Anda tidak
menggunakannya, jadi hapus deklarasi itu.
Saya cenderung mendapatkan ini sedikit ketika saya melakukan beberapa demo karena saya
meninggalkan variabel yang tidak pernah saya gunakan.
Atau ketika saya mendemonstrasikan cara mendeklarasikan variabel dan kemudian saya mengkompilasinya
untuk menunjukkan kepada Anda bahwa dikompilasi, saya akan mendapatkan peringatan yang mengatakan bahwa itu tidak pernah digunakan.
Jadi tidak apa-apa karena saya mendemonstrasikan sesuatu. Tetapi hapus
variabel Anda jika tidak digunakan. Tidak perlu dideklarasikan.
Referensi tidak terdefinisi ke. Ini terjadi pada fase menghubungkan.
Jadi ingat kompiler atau fase kompilasi, itu akan dikompilasi.
Pertama, ia akan menjalankan praprosesor, kemudian akan menghasilkan file objek dan kemudian akan mengambil file
objek tersebut dan menautkannya bersama-sama untuk membuat program yang lengkap.
Jadi selama fase penautan,
ia perlu menyelesaikan dependensi eksternal apa pun.
Atau secara khusus fungsi apa pun yang Anda panggil, mereka
perlu diimplementasikan di suatu tempat.
Jadi jika tidak memiliki file objek itu, itu akan memberi Anda masalah ini.
Anda mencoba memanggil suatu fungsi, tetapi kami tidak memiliki kode untuk itu.
Jadi, Anda harus memastikan bahwa Anda menautkan
ke file ini.
Biasanya tautan akan terjadi
untuk Anda, tetapi di GCC Anda bisa melakukan opsi tanda hubung
l untuk menambahkan file tautan. Jadi jika Anda menggunakan fungsi dalam file
header matematika, tetapi Anda tidak menautkan ke file objek matematika, Anda akan mendapatkan kesalahan ini.
Dan itu juga terjadi jika Anda memiliki pengguna yang ditentukan dan
Anda tidak menyertakan file sumber c.
Jadi, Anda memiliki beberapa file sumber c.
Salah satu file sumber c mengimplementasikan fungsi ini.
File sumber c lain termasuk header dan memanggilnya,
tetapi Anda tidak
pernah mengkompilasi file sumber c lain yang memiliki implementasi, Anda akan melihat
kesalahan ini.
Jadi pastikan Anda membawa file sumber itu, pastikan Anda membawa
file sumber perpustakaan standar apa pun jika Anda perlu secara eksplisit biasanya, Anda tidak perlu melakukannya.
Kesalahan umum lainnya adalah ketika jenis konflik for.
Ini adalah saat Anda benar-benar telah mendefinisikan atau mendeklarasikan prototipe fungsi dan kemudian ketika
Anda mengimplementasikannya, itu tidak sama dengan bagaimana Anda mendeklarasikannya.
Jadi misalnya, prototipe memiliki jenis hasil dan nama kurung untuk parameter dan
kemudian titik koma.
Dan kemudian ketika Anda mendefinisikan implementasinya,
Anda memiliki header fungsi aktual yang berbeda.
Anda memiliki jenis pengembalian yang berbeda atau Anda memiliki jumlah parameter yang berbeda.
Dan ini mengatakan dengan baik, hei, Anda memiliki
deklarasi fungsi yang satu ini. Dan kemudian ketika Anda menerapkannya di bawah, itu benar-benar berbeda.
Jadi ada ketidaksesuaian.
Dan ini benar-benar akan menunjukkan kepada Anda bahwa konflik muncul
dalam definisi sebelumnya yang menyebabkan kontradiksi.
Jadi dalam implementasinya biasanya di mana itu menunjukkan Anda garis karena
biasanya Anda mendeklarasikan fungsi Anda di atas.
Kesalahan waktu proses. Kesalahan runtime adalah masalah dalam kode
Anda yang terjadi saat Anda menjalankan program, bukan saat Anda mengompilasinya.
Jadi ini
biasanya crash atau kesalahan non-fatal di mana
Anda berada di luar batas atau semacamnya.
Saat program sedang berjalan, Anda memiliki semacam kesalahan logika.
Jadi eksekusi program c dapat dihentikan secara tiba-tiba dengan crash ketika kesalahan runtime
terdeteksi, sesuatu yang tidak dapat ditangani. Ada kerusakan memori, seperti yang
saya sebutkan.
Kesalahan di luar batas biasanya menyebabkan program macet.
Biasanya, yang akan Anda lihat adalah kesalahan segmentasi.
Dan kesalahan segmentasi tidak memberi tahu Anda apa-apa.
Jadi biasanya apa yang ingin Anda lakukan untuk mendiagnosis lebih lanjut
masalah ini adalah melihat tumpukan panggilan,
seperti yang saya sebutkan sebelum program lumpuh melangkah baris demi
baris untuk melihat baris apa yang menyebabkan kerusakan.
Anda bisa mendapatkan tumpukan panggilan jika ada file inti, yang saya sebutkan sebelumnya.
Dan kemudian dari tumpukan panggilan, Anda dapat melihat saluran mana yang mogok.
Atau lebih baik lagi, jalankan debugger, selangkah demi selangkah dan kemudian ketika Anda menjalankan satu baris,
debugger, Anda akan melihat program macet dan Anda dapat mengidentifikasinya dengan cara itu.
Jadi ini hanya beberapa tip lagi
tentang kesalahan kompilator dan peringatan dan pesan dan bagaimana menafsirkannya.
Sebenarnya ada
link online. Atau jika
Anda melakukan google, itu akan memberi tahu Anda setiap kesalahan
kompiler dan peringatan yang dapat dihasilkan dan itu benar-benar
akan memberikan definisi mengapa ini diproduksi dan
apa masalahnya pada dasarnya.
Karena sekali lagi, kesalahan kompilasi itu bisa sangat samar.
Dan bahkan satu kata mengatakan kontrol yang
tidak dapat dijangkau. Anda tentu tahu dari deskripsi itu
kecuali Anda memiliki pengalaman itu, itu berarti oh Anda tidak pernah mengembalikan sesuatu dari suatu fungsi.
Tetapi jika Anda melakukannya, salah satu cara terbaik untuk menemukan dan
memperbaiki masalah dalam program Anda ketika Anda memiliki kesalahan kompilator dan Anda tidak memahami
kompiler itu, cari di Google. Dan biasanya yang akan terjadi adalah Anda akan pergi ke stack overflow.
Dan itu akan memberi tahu Anda bahwa ini adalah kesalahan Anda, inilah cara
Anda menyelesaikannya. Saya melakukan itu sampai hari ini.
Saya telah memprogram dalam c selama 15 tahun, tetapi masih
ada saat-saat ketika saya menemukan sesuatu, dan saya seperti apa sebenarnya artinya ini.
Dan saya akan mencarinya di Google, saya akan mengambil kompilernya, memasukkannya ke dalam tanda kutip dan itu
akan memberi tahu saya apa yang sebenarnya terjadi.
Stack overflow adalah situs web yang sangat, sangat bagus.
Dan itu benar-benar dapat menghemat banyak waktu
dalam proses debugging. Jangan hanya mencoba menebak ketika Anda melihat kompiler atau peringatan.
Kompiler itu mencoba memberi tahu Anda sesuatu dan itu akan menunjukkan dengan tepat apa yang terjadi.
Jadi, jika Anda memahaminya, Anda akan dapat memperbaiki masalah Anda lebih cepat.
Dan jika itu bukan sesuatu yang
Anda kenal, buka stack overflow atau kunjungi situs web yang menjelaskan semuanya
dan Anda dapat menguraikannya seperti itu.
Saya harap ini membantu. Terima kasih.