[Powered by Google Translate] CHRIS Gerber: Fungsi adalah satu siri langkah-langkah dalam masa
program yang lebih besar, yang biasanya bertujuan untuk dipanggil
beberapa kali dan dari pelbagai lokasi lain di
program.
Apabila mewujudkan fungsi C, salah satu keperluan untuk
menentukan jenis nilai pulangan.
Kes yang paling mudah adalah satu keadaan di mana memanggil
kod tidak bimbang dengan hasil fungsi.
Ini mungkin kes itu apabila kita mencetak data kepada
paparan pengguna, seperti printf.
Dalam kes ini, kita boleh mengisytiharkan nilai pulangan
menjadi terbatal jenis.
Menggunakan terbatal hanya memberitahu pengkompil bahawa tiada
nilai akan dikembalikan.
Mari kita lihat apa ini kelihatan seperti.
>> Mari kita mengatakan bahawa kita mempunyai satu fungsi yang dipanggil say_hello yang
mengambil satu hujah.
Kami akan lulus ia nama seseorang dan ia akan memaparkan ucapan
pada skrin.
Nama akan * char jenis.
Dan kita akan menentukan bahawa sebagai hujah.
Permohonan saya tidak perlu tahu apa yang telah dicetak atau jika ia
telah dicetak.
Jadi nilai pulangan akan menjadi tidak sah jenis.
Fungsi ini boleh mencetak skrin dengan arahan seperti
printf ("Hello,% s \ n
", Nama);.
Ucapan akan dipaparkan dan kawalan akan lulus
kembali ke kod memanggil.
Satu perkara yang perlu diperhatikan adalah bahawa apabila jenis nilai pulangan tidak sah,
anda tidak perlu untuk memasukkan kembali
kenyataan dalam fungsi.
Jika anda memilih untuk menyertakan satu, tidak termasuk nilai pulangan
sebagai hujah.
>> Dalam beberapa kes, ia masuk akal untuk mengembalikan
nilai dari fungsi.
Mari kita mengatakan bahawa kita telah menulis satu fungsi yang dipanggil add_floats.
Kami akan lulus dua hujah, kedua-dua terapung,
dipanggil pertama dan kedua.
Dan ia akan memberitahu kita apa jumlah mereka terapung.
Kita tahu bahawa jika kita menambah dua terapung bersama-sama, hasilnya
akan apungan.
Diberi bahawa, kita memilih jenis pulangan apungan.
Fungsi ini akan melaksanakan pengiraan ini dan kembalikan
nilai dalam satu kenyataan seperti pulangan
pertama + kedua;.
Apabila kawalan berlalu kembali kepada kod memanggil,
mengakibatkan nilai kini disediakan kepada kod itu.
Kita boleh menyimpan nilai ini seperti begitu: hasil apungan =
add_floats (3.14, 1,62
);.
Keputusan dalam kes ini kini akan mengandungi nilai 4,76.
>> Sebagai peringatan, nilai titik terapung adalah tidak tepat.
Jadi, jika ini adalah pengiraan kewangan, menggunakan dolar dan
sen, kita mungkin mahu mempertimbangkan jenis data yang tepat seperti
int dan melaksanakan pengiraan dalam beberapa sen.
>> Satu lagi kes di mana kita mahu untuk mengembalikan nilai dari
fungsi adalah apabila kita hendak tahu jika fungsi itu
berjaya.
Jika ia tidak berjaya, kita juga mungkin mahu tahu apa jenis
kesalahan berlaku.
Mari kita mengatakan bahawa kita sedang cuba untuk membuka fail pada cakera untuk dikira
bilangan aksara di dalamnya.
Jika fail tidak boleh dibuka, kita mahu dapat menghentikan dan
memberitahu pengguna tentang masalah ini.
>> Kami akan memanggil count_file_chars fungsi kami dan ia akan
mengambil satu hujah.
Kami akan lulus dalam nama fail menggunakan
char * dipanggil nama fail.
Fungsi ini mungkin kelihatan sesuatu seperti ini.
Dalam contoh ini, kita akan menjangkakan kiraan kembali ke
0 atau lebih.
Ini meninggalkan kita integer negatif kepada
digunakan sebagai nilai sentinel.
Satu nilai sentinel hanya nilai khas yang tidak
data sah tetapi tidak menyampaikan maklumat.
Di sini, jika saya pulang -1 hingga kod memanggil, saya
sebenarnya menghantar mesej ralat berlaku semasa
cuba untuk mengakses fail.
Saya kemudian dapat menyemak bahawa nilai kembali untuk menentukan jika saya
panggilan fungsi berjaya.
Jika nombor itu adalah 0 atau lebih, saya ingin tahu
bilangan aksara dalam fail.
Walau bagaimanapun, jika nombor adalah kurang daripada 0, saya dapat hanya
mencetak bahawa masalah telah berlaku.
Satu trade-off perlu dipertimbangkan ialah bahawa oleh menempah semua
nilai-nilai negatif sebagai nilai sentinel, dengan anggapan ini adalah
Integer 32-bit, saya telah pada dasarnya diambil dari sekitar
2000000000 pulangan nilai yang mungkin.
>> Jenis nilai pulangan adalah salah satu elemen yang paling penting
fungsi panggilan.
Semoga gambaran singkat ini telah membantu anda berfikir tentang
tiga jenis utama: terbatal, nilai hasil, dan nilai-nilai sentinel,
dan apabila setiap tiga mungkin
sesuai dalam kod anda.
Terima kasih kerana menonton.