1 00:00:00,000 --> 00:00:00,160 2 00:00:00,160 --> 00:00:04,010 >> SPEAKER 1: Jadi aku merasa seperti saya cenderung untuk menulis printf hello world atau printf 3 00:00:04,010 --> 00:00:08,160 halo persen s cukup sering dalam konteks di mana saya ingin mencetak 4 00:00:08,160 --> 00:00:11,360 String, kadang-kadang meminta pengguna bagian dari string tersebut. 5 00:00:11,360 --> 00:00:14,980 Nah, bukankah akan lebih baik jika kita buat fungsi dari kami sendiri disebut, 6 00:00:14,980 --> 00:00:19,900 mengatakan, nama cetak, yang tujuannya dalam hidup hanya untuk mencetak halo koma 7 00:00:19,900 --> 00:00:24,560 begitu-dan-jadi dengan menerima begitu-dan-jadi sebagai argumen untuk fungsi itu? 8 00:00:24,560 --> 00:00:29,220 Kita dapat mendeklarasikan fungsi kita sendiri sama seperti kita dapat di Scratch sebagai berikut. 9 00:00:29,220 --> 00:00:35,280 >> Dengan kata lain, misalkan saya ingin printf nama Anda dan kemudian meminta pengguna 10 00:00:35,280 --> 00:00:39,470 nama nya dengan tali s sama GetString. 11 00:00:39,470 --> 00:00:42,060 Dan kemudian saya ingin memanggil fungsi disebut nama cetak 12 00:00:42,060 --> 00:00:44,340 melewatkan sebagai input. 13 00:00:44,340 --> 00:00:47,770 >> Sekarang sayangnya, tidak ada fungsi disebut nama cetak di C atau di 14 00:00:47,770 --> 00:00:48,950 perpustakaan CS50. 15 00:00:48,950 --> 00:00:51,220 Tapi tak masalah, karena kita bisa membuatnya sendiri. 16 00:00:51,220 --> 00:00:54,560 Untuk menyatakan fungsi kita sendiri dan kemudian menerapkannya, kita hanya dapat membuat 17 00:00:54,560 --> 00:00:59,000 beberapa ruang di file ini dan menyatakan fungsi ini sebagai berikut, kekosongan - 18 00:00:59,000 --> 00:01:01,900 menandakan bahwa fungsi tidak benar-benar akan mengembalikan sesuatu, 19 00:01:01,900 --> 00:01:03,890 meskipun akan memiliki efek samping - 20 00:01:03,890 --> 00:01:08,030 nama cetak, dan kemudian mari kita tentukan di kurung nama cetak mengharapkan 21 00:01:08,030 --> 00:01:09,680 argumen tipe string. 22 00:01:09,680 --> 00:01:12,180 Dan secara umum, kita akan berpikir itu sebagai nama. 23 00:01:12,180 --> 00:01:15,140 >> Dan mari kita buka brace kami dan menutup brace kami. 24 00:01:15,140 --> 00:01:21,930 Dan kemudian printf dalam halo koma Nama jalur koma baru persen s. 25 00:01:21,930 --> 00:01:24,570 Dengan kata lain, meskipun ini fungsi hanya satu baris kode, itu 26 00:01:24,570 --> 00:01:27,290 tidak sekarang memiliki beberapa tinggi Tujuan tingkat untuk mencetak 27 00:01:27,290 --> 00:01:28,950 nama seseorang dengan ucapan. 28 00:01:28,950 --> 00:01:33,115 >> Sekarang dalam utama, perhatikan bahwa aku memanggil nama cetak dengan melewatkan s. 29 00:01:33,115 --> 00:01:35,830 Dan jadi saya tampaknya sekarang memiliki sebuah program yang lengkap. 30 00:01:35,830 --> 00:01:38,650 Satu-satunya perbedaan adalah dari orang lain kami telah menulis adalah bahwa tidak hanya 31 00:01:38,650 --> 00:01:42,480 Program ini telah utama, juga memiliki deklarasi dan implementasi 32 00:01:42,480 --> 00:01:44,740 Nama cetak, fungsi dari saya sendiri. 33 00:01:44,740 --> 00:01:49,505 >> Sekarang mari kita mengkompilasi program saya dengan make fungsi nol, dan menjalankannya dengan dot 34 00:01:49,505 --> 00:01:51,080 slash fungsi nol. 35 00:01:51,080 --> 00:01:53,390 Ketika diminta untuk nama saya Aku akan ketik David. 36 00:01:53,390 --> 00:01:55,830 Dan saya memang saya disambut dengan "Halo, David." 37 00:01:55,830 --> 00:02:00,160 >> Sekarang, ternyata aku sangat sengaja Nama cetak yang dinyatakan di atas utama, 38 00:02:00,160 --> 00:02:03,860 dengan demikian memberitahu C di muka bahwa ada ada fungsi yang disebut print 39 00:02:03,860 --> 00:02:06,930 nama sehingga saya bisa menggunakan nanti di utama. 40 00:02:06,930 --> 00:02:11,610 Sekarang, telah saya bukan menempatkan nama cetak pada bagian bawah file saya, terus terang saya 41 00:02:11,610 --> 00:02:15,310 mungkin harus melakukan agar tetap utama hal pertama yang saya atau 42 00:02:15,310 --> 00:02:18,450 pengguna lain melihat dalam kode saya, ternyata kode saya adalah 43 00:02:18,450 --> 00:02:19,780 tidak akan dikompilasi. 44 00:02:19,780 --> 00:02:23,610 >> Secara khusus, jika saya kembali ke saya window terminal dan menjalankan membuat fungsi 45 00:02:23,610 --> 00:02:26,120 nol sekarang, perhatikan bahwa aku berteriak. 46 00:02:26,120 --> 00:02:30,340 Jika saya gulir ke atas dalam jendela terminal saya, Aku akan melihat kesalahan pertama ini merah, 47 00:02:30,340 --> 00:02:33,120 deklarasi implisit nama fungsi cetak. 48 00:02:33,120 --> 00:02:34,220 >> Sekarang, apa artinya? 49 00:02:34,220 --> 00:02:37,190 Yah, meskipun saya telah menerapkan mencetak nama dalam file ini, saya tidak punya 50 00:02:37,190 --> 00:02:40,080 dilaksanakan sebelum aku sudah menggunakannya dalam utama. 51 00:02:40,080 --> 00:02:43,160 Sekarang, kita bisa kembali ke yang lama versi dan nama cetak menempatkan ini 52 00:02:43,160 --> 00:02:44,450 implementasi atas. 53 00:02:44,450 --> 00:02:48,730 >> Tapi aku malah bisa hanya memberikan C petunjuk bahwa ada fungsi yang akan datang. 54 00:02:48,730 --> 00:02:55,390 Secara khusus, di atas utama saya dapat menyatakan mencetak nama hanya seperti yang saya lakukan sebelumnya, tetapi 55 00:02:55,390 --> 00:02:59,450 mengakhiri baris dengan titik koma, sehingga menjanjikan untuk menerapkan tetapi belum 56 00:02:59,450 --> 00:03:02,180 benar-benar menerapkan fungsi disebut nama cetak. 57 00:03:02,180 --> 00:03:05,860 Saya kemudian dapat memiliki utama di bagian atas saya mengajukan seperti aku berharap, dan aku benar-benar bisa 58 00:03:05,860 --> 00:03:07,440 mengimplementasikan cetak nama di bagian bawah. 59 00:03:07,440 --> 00:03:12,860 >> Jika saya sekarang kembali ke jendela terminal saya dan mengkompilasi ulang fungsi nol dengan make, 60 00:03:12,860 --> 00:03:14,390 kali ini mengkompilasi. 61 00:03:14,390 --> 00:03:18,240 Dan jika saya menjalankannya dengan fungsi slash dot zero memberikan nama saya, saya 62 00:03:18,240 --> 00:03:20,650 disambut sebagai "Halo, David." 63 00:03:20,650 --> 00:03:22,268