Perkenalan
- 1121
- 334
- John Ratke
Perpustakaan standar C menawarkan sejumlah besar fungsi untuk banyak tugas biasa. Juga ada banyak perpustakaan untuk fungsi tambahan, seperti desain GUI (GTK+) atau Interfacing Database (LIBPQ). Namun, saat Anda maju di dunia pemrograman C, Anda akan segera menemukan diri Anda mengulangi instruksi yang sama dalam urutan yang sama berulang kali dan itu akan menjadi waktu yang memakan waktu dan tidak efisien. Jadi Anda bisa membungkus semua instruksi itu dalam suatu fungsi dan adil panggilan fungsi tersebut saat Anda membutuhkannya. Inilah yang akan Anda pelajari dengan membaca artikel ini, ditambah beberapa tips berguna yang akan membuat hidup Anda lebih mudah.
Membuat fungsi Anda
Untuk awal yang sederhana, katakanlah Anda ingin menulis kalkulator. Kami tidak akan fokus pada antarmuka (GUI vs CURSES vs Slang vs CLI) karena kami tertarik pada internal. Itu akan kikuk bukan Buat fungsi untuk setiap operasi yang Anda putuskan untuk didukung, kecuali sudah ada satu, seperti POW (), didefinisikan dalam matematika.h, yang mengembalikan hasil basis yang diangkat ke kekuatan. Jadi, misalnya, untuk penambahan Anda akan memiliki fungsi bernama add () yang membutuhkan dua argumen, setidaknya untuk saat ini, dan kembali hasil. Jadi ketika pengguna memilih untuk menambahkan nomor yang ia perkenalkan, Anda hanya panggilan Fungsi dengan angka yang dimasukkan pengguna dan Anda tidak perlu khawatir tentang hal lain. Tiga istilah yang saya tulis ini dalam huruf miring sangat penting dalam pemahaman fungsi. Fungsi biasanya (tetapi tidak selalu) mengambil sesuatu, melakukan sejumlah operasi pada sesuatu itu dan mengeluarkan hasilnya. “Tidak selalu” karena Main (), seperti yang dapat Anda lihat sebelumnya, dapat dipanggil tanpa argumen, dan ada contoh lain juga. Tapi untuk saat ini, mari kita fokus pada contoh kita. Angka -angka yang perlu ditambahkan bersama adalah argumen, bahwa "sesuatu" yang Anda berikan fungsi untuk diproses. Bagian pemrosesan ada di dalam tubuh fungsi, saat Anda mengatakannya untuk menambahkan angka bersama -sama. Setelah itu, bagian "meludah" disebut mengembalikan nilai, yang, dalam kasus kami, hasil dari penambahan.
Mari kita lihat apa yang kita bicarakan dalam contoh praktis:
#termasuk /* Ini berisi definisi printf ()*/ Tambah Ganda (Double X, Double Y); int main () float pertama, kedua; printf ("Harap masukkan nomor pertama.\ n "); scanf ("%f ", & first); printf (" Harap masukkan nomor kedua.\ n "); scanf ("%f ", & kedua); Double ADD (Double A, Double B) kembali a + b; printf ("Hasil penambahan adalah %f \ n", tambahkan (pertama, kedua)); kembali 0;
Kode di atas, meskipun paling sederhana, membantu kita menunjukkan dengan tepat apa yang kita bicarakan sebelumnya. Pertama kami mendeklarasikan fungsinya, sebelum main (), dan tujuannya adalah untuk mengetahui nama, jenis argumen dan jenis fungsi kembali. Baris ini juga disebut mendefinisikan prototipe fungsi. Seperti yang Anda lihat, nama argumen dari deklarasi tidak harus sama dengan yang digunakan dalam definisi, tetapi jika itu mengganggu Anda, gunakan skema penamaan yang konstan, tidak apa -apa. Sebelum kita menggunakan fungsi, kita harus mendefinisikannya, seperti pada dunia apa tepatnya. Bahkan jika tubuh fungsi adalah satu baris, seperti halnya dalam contoh kami, yang terbaik adalah Anda menggunakan kawat gigi untuk keterbacaan dan untuk kebiasaan yang baik. Di sini, semua yang dilakukan fungsi adalah mengembalikan hasil penambahan antara dua angka.
Kami menyarankan Anda menggunakan nama untuk fungsi, argumen, dan variabel atau konstanta biasa yang mencerminkan apa yang mereka lakukan, sekali lagi untuk kebiasaan yang baik dan untuk menyisakan programmer yang membaca kode Anda upaya untuk menebak variabel apa yang "xyzgth" lakukan atau digunakan untuk atau digunakan. Juga, Gunakan komentar. Bahkan jika dalam kode di atas komentar mungkin tampak berlebihan, mereka tidak. Ketika Anda melihat kode dua bulan kemudian, Anda tidak akan tahu apa yang ada di pikiran Anda saat Anda menulis kode. Jadi gunakan dan menyalahgunakan komentar, mereka akan menyelamatkan Anda, percayalah.
Latihan
Ada fungsi yang dapat menerima sejumlah argumen, seperti printf () misalnya. Anda diizinkan menggunakan Google untuk melihat apa yang mereka lakukan dan mencoba menulis ulang fungsi add () untuk menerima lebih dari dua argumen, atau membuat fungsi lain. Anda juga dapat menggunakan "man 3 printf".
Kami memberi tahu Anda sebelum main () dapat dipanggil tanpa argumen. Tentu saja, itu berarti dapat dipanggil dengan argumen juga. Kapan ini berguna? Dalam program yang sederhana seperti kami, karena kami menyebutnya tanpa argumen, tanda kurung dari main () kosong. Tetapi ketika program Anda akan tumbuh dalam kompleksitas, terutama jika mereka akan berorientasi pada baris perintah, Anda perlu menambahkan fungsionalitas argumen, seperti bendera -V GCC yang mencetak versi. Ketika fungsionalitas seperti itu diinginkan, main () harus memiliki argumen, dua tepatnya. Fungsi utama menjadi
int main (int argc, char ** argv) ...
Sebelum Anda panik tentang nama samar dan tanda bintang ganda, tunggu sampai Anda mendapatkan penjelasan, yang sebenarnya sederhana. Argumen pertama adalah bilangan bulat bernama argc, dan namanya berasal dari "jumlah argumen". Sedikit lebih baik, benar? Tentang argumen kedua ... yah, namanya adalah singkatan dari "argumen vektor" secara resmi dan itu adalah penunjuk ke pointer ke arang. Sekarang, dalam bahasa Inggris, sementara argc menyimpan jumlah argumen, argv menyimpan argumen sebagai serangkaian string. Bagian "Pointer to ..." akan dijelaskan di bagian selanjutnya dari artikel ini, untuk saat ini yang perlu Anda ketahui adalah bahwa jika, misalnya, pengguna akan mengetikkan tiga argumen ke program, indeks nol argv akan menjadi namanya Dari program itu sendiri, indeks seseorang akan menyimpan argumen pertama ke program dan sebagainya. Beginilah cara Anda dapat menggunakan sakelar/kasing untuk memeriksa argumen yang diteruskan ke program Anda. Sebelum kami memberi Anda contoh singkat, kami merasa terdorong untuk memberi tahu Anda bahwa Main memiliki dua argumen sebagaimana didefinisikan oleh standar, dan ini adalah bagaimana ia digunakan pada sebagian besar sistem Linux dan UNIX. Namun, jika Anda (akan) bekerja di Windows atau Darwin, Main () akan memiliki satu atau dua argumen lagi, tetapi itu tergantung pada sistem dan karenanya tidak ditentukan atau diminta oleh standar. Juga, "char ** argv" mungkin juga ditulis sebagai "char *argv []". Anda akan melihat keduanya, tergantung pada preferensi pengembang.
Anda mungkin ingat kami memberi tahu Anda di bagian pertama dari seri kami bagaimana kami akan menggunakan program Yest Kimball Hawkins untuk contoh. Sudah saatnya kita mulai, jadi inilah cara berurusan dengan bagian dari kemungkinan input pengguna:
jika (strncmp (argv [i], "--help", 6) == 0 || strncmp (argv [i], "-?", 2) == 0 || strncmp (argv [i],"?", 1) == 0 || strncmp (argv [i]," help ", 4) == 0) yest_help (); / * bantuan yang diminta, menampilkannya */ jika (strncmp (argv [i], "--version", 9) == 0 || strncmp (argv [i], "--license", 9) == 0) yest_version (); / * informasi versi/lisensi yang diminta */
Anda dapat melihat dalam kode ini bagaimana Kimball mengomentari kodenya, meskipun nama fungsi yang ia sebut - yest_help () dan yest_version () - cukup jelas diri. Fungsi strncmp () standar, dapat ditemukan di string.h, membandingkan dua string, dalam kasus kami argv [i] dan "help", misalnya, tetapi hanya karakter x pertama (4 di baris "bantuan") dan mengembalikan nol jika string pertama cocok dengan yang kedua.
Latihan
Bagaimana Anda menggunakan Switch/Case untuk memeriksa apakah argumen pertama adalah "-Help" dan yang kedua adalah "-Version"? Dapatkah opsi ini digunakan bersama? Bagaimana kodenya berbeda?
Hal -hal yang harus diperhatikan
C tidak memungkinkan Anda untuk mendefinisikan fungsi di dalam yang lain, dengan pengecualian utama (), yang, seperti yang dapat kita lihat, spesial. Waspadai juga bahwa apa yang Anda definisikan di dalam fungsi "hidup" di dalam fungsi saja. Jadi Anda dapat memiliki variabel bernama "A" yang didefinisikan di dalam tiga fungsi berbeda tanpa masalah sama sekali, tetapi itu dapat menyebabkan masalah dalam program yang lebih besar, jadi kami tidak merekomendasikannya.
File header khusus
Karena program Anda akan tumbuh lebih besar dan lebih besar, Anda akan menemukan kebutuhan untuk membaginya. Anda dapat memiliki lebih dari satu file sumber, tetapi Anda juga dapat menulis header Anda sendiri. Jadi kembali ke program tambahan kami, Anda dapat membuat header bernama operasi.h yang akan memiliki garis “Double Add (Double X, Double Y);”, jadi program Anda hanya akan berurusan dengan definisi, bagian di mana Anda mengatakan bahwa add () akan mengembalikan A + B. Termasuk header khusus Anda dilakukan seperti halnya Anda menyertakan yang diinstal sistem dengan satu pengecualian penting: Ingatlah untuk menggunakan kutipan ganda alih-alih kurung sudut, seperti ini: "termasuk" operasi ".H"". Header ini dapat ditempatkan di direktori di mana file sumber lain disimpan atau di jalur lain, ditentukan sebagai argumen untuk GCC sehingga akan tahu di mana harus melihat. File header juga dapat berisi definisi konstan (dengan #define) atau deklarasi lainnya, selama Anda tahu bahwa mereka akan digunakan di setiap file sumber program. Itu bukan wajib, itu hanya praktik yang baik. Jadi, bagaimana Anda menulis kalkulator yang hanya berurusan dengan operasi aritmatika dasar dan menggunakan header?
Fungsi rekursif
Seperti yang kami harapkan dari Anda memiliki beberapa latar belakang pemrograman, kami yakin Anda tahu fungsi rekursif apa itu dan bagaimana/kapan menggunakannya. Inilah sebabnya mengapa sub -bab ini akan lebih pendek dari biasanya. Singkatnya, seseorang mengatakan tentang suatu fungsi untuk menjadi rekursif saat memanggil dirinya sendiri. Meskipun konsepnya mungkin menakutkan bagi pemrogram baru, satu rekursi cara yang lebih sederhana dan nyata dapat dijelaskan adalah ini: cobalah duduk di antara dua cermin saling berhadapan. Efek yang Anda lihat adalah representasi visual dari rekursi. Tapi kami akan memberi Anda contoh singkat, sehingga Anda lebih mengerti kapan dan bagaimana menggunakannya. Anda mungkin ingat dari sekolah ketika Anda diajari tentang faktorial. Faktorial adalah produk dari semua bilangan bulat yang lebih kecil dari itu atau sama, selama mereka lebih besar dari nol. Notasi untuk ini adalah tanda seru, jadi 6! = 6*5*4*3*2*1 = 720. Bagaimana kita bisa melakukan ini dalam C dengan cara yang paling efisien? Tentu saja, menggunakan rekursi.
Int Factororial (nomor int) jika(nomor <= 1) kembali 1; kalau tidak kembali Nomor * Faktorial (Nomor-1)
Kesimpulan
Kami menyarankan Anda menggunakan fungsi sesering mungkin, dan meletakkan prototipe mereka di file header sesering, karena kode Anda akan lebih terorganisir dan pekerjaan Anda akan menjadi lebih mudah. Berbicara tentang header, kami meninggalkannya sebagai latihan terakhir bagi Anda untuk mulai membaca file header yang mendefinisikan operasi matematika (matematika.h) untuk mendapatkan gambaran bagaimana kelihatannya dan apa yang dikandungnya. Kemudian gunakan untuk meningkatkan kalkulator dengan beberapa fungsionalitas yang ditingkatkan di luar dasar.
Inilah yang dapat Anda harapkan selanjutnya:
- SAYA. C Perkembangan di Linux - Pendahuluan
- Ii. Perbandingan antara C dan bahasa pemrograman lainnya
- AKU AKU AKU. Jenis, Operator, Variabel
- Iv. Alur kontrol
- V. Fungsi
- Vi. Pointer dan Array
- Vii. Struktur
- Viii. I/O Dasar
- Ix. Gaya pengkodean dan rekomendasi
- X. Membangun program
- Xi. Kemasan untuk Debian dan Fedora
- Xii. Mendapatkan paket di repositori resmi Debian
Tutorial Linux Terkait:
- Hal -hal yang harus diinstal pada ubuntu 20.04
- Pengantar Otomatisasi Linux, Alat dan Teknik
- Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
- Menguasai loop skrip bash
- Hal -hal yang harus diinstal pada Ubuntu 22.04
- Ubuntu 20.04 Panduan
- SQLite Linux Tutorial untuk Pemula
- Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
- Hal -hal yang harus dilakukan setelah menginstal ubuntu 22.04 Jammy Jellyfish…
- Cara Dual Boot Kali Linux dan Windows 10