C/C++ Öğreniyorum (#8)

PwnLab.Me

Admin
Katılım
21 Ocak 2024
Mesajlar
203
Tepkime puanı
10
Puanları
18
Süleyman KAYA tarafından yazılmıştır.

[TR] C/C++ Öğreniyorum (#8)​

Giriş​


Merhaba, ben Süleyman Kaya. Bilgisayar bilimleri araştırmacısıyım. Bilgisayar bilimleri için C/C++ öğrenirken edindiğim bilgileri paylaşmak üzere bu yayın serisini sizlerle paylaşıyorum. Kaynak olarak Fahrettin Erdinç’in “Mühendislik Öğrencileri İçin Temel Klavuz: C++/C” kitabını kullanacağım. Bu yazımda C dilinde fonksiyonlardan bahsedeceğim.

Fonksiyon Nedir?​


Ana program tarafından gerektiğinde çağrılıp çalıştırılan program parçacıklarına fonksiyon denir. Fonksiyonlar, bazı dillerde altprogram, prosedür veya metot adıyla da anılır.

Fonksiyonlara Neden İhtiyaç Duyarız?​


Eğer program içinde bazı işlemleri sık yapıyorsak her işlem için kod yazmak yerine bu kodu bir defa yazar ve fonksiyon olarak kaydederiz ve gerektiğinde kullanırız. Zamandan ve koddan tasarruf etmiş oluruz, hamallığı azaltırız. Eğer fonksiyon kullanılmazsa aynı kodlar tekrar tekrar yazılır ve program gereksiz yere uzamış olur. Fonksiyonlar büyük bir programı küçük parçalara bölmemizi ce daha basit küçük parçalar halinde kod yazmamızı sağlar. Böylece algoritma kolaylaşır ve kod yazmak basitleşir.

Örnek Bir Fonksiyon Oluşturalım​


Fonksiyonlar C tabanlı dillerde en önemli konulardan biridir çünkü çok sık kullanılır. Bu nedenle çok iyi bilinmesi gereken konulardan biridir. Hatta diyebiliriz ki fonksiyon bilmeden programcı olunmaz. Fonksiyonları öğrenmesi biraz zor olabilir ama öğrendikten sonra çok faydasını göreceğiz.

Aşağıdaki örnekte main() adlı ana fonksiyon ve kare(int x) fonksiyonu görünmektedir.

#include <stdio.h>

int kare(int x){

int kare;

kare = x*x;

return kare;

}

void main(){

int s=5;

printf(“%d”, kare(s));

}

Yukarıdaki kodlarda kare(s) ifadesi ile s değişkeni kare(int x) fonksiyonuna gönderilmektedir. kare fonkiyonu kendisine gelen parametreryi yani s değişkenini alır, fonksiyonumuzun içine yazdığımız komutları ürütür ve çıktısını ana programa gönderir.

Kullanıcı Tanımlı Fonksiyonlar​


C dilinde fonksiyonlar ikiye ayrılır:

  • Kullanıcı Tanımlı Fonksiyonlar: Kullanıcı tarafından yazılan ve gerektiğinde çağrılıp çalıştırılan fonksiyonlardır.
  • C Dili Fonksiyonları: C dilinin bir parçası olan ve kütüphane ya da header dosyaları denen .h uzantılı dosyalar içinde gelen hazır gelir fonksiyonlardır.

Eğer belli bazı kodları bir fonksiton olarak kaydetmek ve tekrar tekrar kullanmak istiyorsak fonksiyonu aşağıdaki kalıba uygun bir şekilde hazırlamalıyız.

donus_veri_tipi fonksiyon_adi(parametreler) //-> Fonksiyon basligi{

kodlar;

return degisken;

}

Yukarıda kalıba dikkat ederseniz bir fonkisyon temel olarak bir fonksiyon başlığı ve kod bloğuna sahiptir. Fonksiyon başlığında dönüş tipi, fonksiyon adı ve fonksiyon parametreleri yer alırken kod bloğunda fonksiyonu çalıştıran kodlar bulunur.

Fonksiyon Oluşturulurken Dikkat Edilmesi Gereken Kurallar​

  • Fonksiyonlar belli bir işi yapmak için oluşturulmalı ve mümkün olduğunca basit tutulmalıdır. Örneğin hem bir sayının karesini alan hem de sayıyı başka bir sayıyla toplayan (çift işlevli) bir fonksiyon yapılmamalıdır.
  • Fonksiyon adı genel olarak değişken adı kurallarıyla aynı ilkelere sahiptir; değişken tanımlarken kullandığımız kurallar fonksiyonlarda da geçerlidir.
  • Fonksiyonun yapacağı işler yani kodlar/komutlar güzel parantez {} içine yazılmalıdır.
  • Fonksiyon tipi ana programa göndereceği değere göre int, char, double veya void gibi bir veri tipine sahip olabilir.
  • Eğer fonksiyon ana programa bir değişken döndürecekse return (döndür) komutu kullanılır.
  • Fonksiyon ana programa değer döndürmeyecek ise void tipindedir.
  • Fonksiyonlar ana programdan önce tanımlanmalıdır. Eğer daha sonra tanımlanırsa derleme işlemi yukarıdan aşağıya doğru gerçekleşecei için hata alıncakaktır. Eğer fonkiyonu illa ana programdan sonra yazmamız gerekiyorsa fonksiyonumuzun prototipini ana program içinde yazmamız gerekir. Fnksiyonun prototipi veri_tipi fonksiyon_adi(parametreler); şeklinde ana programın üst kısmına yazılır.

Dönüş Tipi​


Bir fonksion çalıştıktan sonra ana programa veya çalıştırıldığı fonksiyona bir değer döndürür. Bu değer diğer veriler gibi bir veri tipine sahip olmalıdır. Fonksiyonumuzun isminden önce çıktı olacak verinin tipini yazarız ve böylelikle fonksiyonumuzdan çıkacak değerin, fonksiyonumuzun tipini belirlemiş oluruz. Eğer ana programa veya fonksiyonumuzun çalıştığı bloğa bir değer döndürülmeyecekse fonksiyonumuzun tipi void olmalıdır.

Değer Döndürmeyen Fonksionlar​


Bu tür fonkiyonlar ana program tarafından çalıştırılır fakat ana programa bir değer göndermezer. O nedenle bu tür fonksiyonlara veri tipi olarak boş anlamına gelen “void” kelimesi kullanılır.

Örnek kod:

void merhaba(){printf(“merhaba”);}

Yukarıdaki çalışan kodlarda konsola merhaba yazdırılır ve ana programa bir değer döndürülmez. Bu nedenler fonksiyonun veri tipi void olarak yazılmıştır.

Tek Parametreli Fonksiyonlar​


Parametreler fonksiyona ana program tarafından gönderilen uygun veri tipinde değerlendirilir. Fonksiyon ana programdan gelen değeri alarak bir takım işlemler yapar. Örnek:

int kare(int a){

int k;

k=a*a;

return k;

}

Çok Parametreli Fonksiyonlar​


Ana programdan fonksiyona birden fazla parametre gönderilirse fonksionumuz çok parametreli bir fonksiyon olur. Birden fazla parametre göndermek için her bir parametrenin arasına virgül (,) konulur. Örnek:

double topla(double a, double b){

double toplam=a+b;

return toplam;

}

Fonksiyon nasıl çağrılır?​


Eğer bir fonksiyonumuz varsa ve bu fonksiyona iş yaptırmak istiyorsak o fonksiyonu çağırmamız yani çalıştırmamız gerektir. Fonksiyonları çağırmak için aşağıdaki yöntemler kullanılabilir:

  • Eğer parametresiz bir fonksiyon çağıracaksak doğrudan çağırabilirz. Örneğin kullanacağımız fonksiyonun adı topla ise doğrudan topla(); şeklinde bir kod yazabiliriz.
  • Eğer parametreli bir fonksiyon kullanacaksak ana programdan fonksiyona parametre göndermemiz gerekir. Örneğin topla(int a, int b) şeklinde bir fonksiyon kullanacaksak ilgili değerleri veya değişkenleri fonksiyona göndermemiz gerekir.
  • Fonksiyonları değişkenlere atayarak da kullanabiliriz. Bu durumda fonksiyon çalışır ve döndürdüğü değer değişkene atanır. Örneğin int toplam=topla(4,5); komutunu kullandığımız zaman topla fonksiyonu çalışır ve döndürdüğü değer toplam değişkenine atanır. Döndürülen değerleri saklamak istiorsak bu yöntemi kullanmalıyız.
  • Fonksiyonları başka fonksiyonların içinde de kullanabiliriz. Örneğin: printf(“%d”, topla(4,5)); komutunu çalıştırdığımızda topla fonksiyonu çalışır ve ürettiği değeri printf fonksiyonu içinde döndürür.

Main Fonksiyonu​


main() her C programında olmak zorundadır ve adı değiştirilemez. Bazen yeni açılan projelerde main() fonksiyonu void tipindedir çünkü genelde ana program geriye (işletim sistemine) bir değer döndürmez. Örnek:

#include <stdio.h>

void main(){printf(“merhaba”);}

Eğer main() fonksiyonunun tipini int yaparsanız işletim sistemine int tipinde bir değer döndürür. Aşağıda program bittiğinde işletim sistemine 0 (sıfır) döndüren bir main() fonksiyonu görüyorsunuz.

#include <stdio.h>

int main(){

printf(“merhaba”);

return 0;

}

Fonksiyon Prototipi​


Eğer fonksiyon başlığının sonuna noktalı virgül koyarsanız fonksiyon prototipi olur. Örneğin int kare(int x){} fonksiyonunun prototipi kare(int x); olur.

Normalde fonksiyonları ana programdan daha önce tanımlamamaız / yazmamız gerekir. Bunun nedeni derleyicinin kodları yukarıdan aşağıya doğru derlemesidir, derleyici fonksiyonu ana programdan önce derlemezse ana programda kullanılan fonksiyonu anlamayacak ve hata verecektir. Bunun önüne geçmek için ise kullanacağımız fonksiyonların prototipini ana programdan önce tanımlarız.

Örnek:

#include <stdio.h>

kare(int x); //önce fonksiyon prototipi yazılır.

void main()

{

int i=5;

printf(“%d”, kare(i));

}

void kare(int x) //fonksiyon

{

int kare=x*x;

return kare;

}

Standart C Dili Fonksiyonları​


Fonksiyonlar programcı tarafından oluşturulabilir veya C kütüphanesi içince hazır olarak gelebilir. C programlama diline ait kütüphane dosyalarında kullanılmaya hazır yüzlerce fonksiyon vardır ve bunları kullanmak hem zaman hem de hız kazandırır.

Kütüphane dosyalarını programa eklemek ve içindeki hazır fonksiyonları kullanabilmek için #include komutu kullanılır. Bu komut main() fonksiyonundan önce kullanılmalı ve ilgili fonksiyonları barındıran kütüphane dosyasının adı <…….> karakterlerinin içine yazılmalıdır. Farklı işlemler yapan fonksiyonlar farklı kütüphanelerin içinde bulunur. Bu fonksiyonların bulunduğu kütüphane dosyalarının adı öğrenilmeli ve her biri aşağıdaki gibi programa dahil edilmelidir:

#include <stdio.h>

#include <math.h>

#include <string.h>

Aşağıda sıkça kullanılan standart kütüphane (header) dosyaları ve genel olarak ne amaçla kullanıldığı yazılmaktadır. Bu kütüphane dosyaları her C derleyicisi ile gelmekte ve standart olarak desteklenmektedir.

  • <math.h> Matematiksel işlemler
  • <ctype.h> Karakter işlemleri
  • <string.h> Metin işlemleri
  • <stdio.h> Giriş/Çıkış işlemleri
  • <conio.h> Yazı işlemleri
  • <graphics.h> Grafik işlemleri
  • <stdlib.h> Muhtelif işlemler

Kapanış​


Bir sonraki yayınımda C dilinde dizilere değinmeyi planlıyorum. İyi günler dilerim.
 
Moderatör tarafında düzenlendi:
Geri
Üst