C'de İşlev nedir?
C programlamadaki işlev , bir programın anlaşılmasını, test edilmesini kolaylaştıran ve çağıran programı değiştirmeden kolayca değiştirilebilen yeniden kullanılabilir bir kod bloğudur. İşlevler kodu böler ve daha iyi ve etkili sonuçlar için programı modüler hale getirir. Kısacası, daha büyük bir program, işlevler olarak adlandırılan çeşitli alt programlara bölünmüştür.
Büyük bir programı çeşitli işlevlere böldüğünüzde, her işlevi ayrı ayrı yönetmek kolay hale gelir. Programda bir hata oluştuğunda, hatalı işlevleri kolayca araştırabilir ve yalnızca bu hataları düzeltebilirsiniz. Otomatik olarak zamandan ve yerden tasarruf sağlayan işlevleri gerektiğinde kolayca arayabilir ve kullanabilirsiniz.
Bu eğitimde öğreneceksiniz-
- Kütüphane Vs. Kullanıcı Tanımlı İşlevler
- İşlev Beyanı
- Fonksiyon tanımı
- İşlev çağrısı
- İşlev Bağımsız Değişkenleri
- Değişken Kapsam
- Statik Değişkenler
- Özyinelemeli İşlevler
- Satır İçi İşlevler
Kütüphane Vs. Kullanıcı Tanımlı İşlevler
Her 'C' programının ana işlevi olan en az bir işlevi vardır, ancak bir programın herhangi bir sayıda işlevi olabilir. C'deki main () işlevi, bir programın başlangıç noktasıdır.
'C' programlamada, işlevler iki türe ayrılır:
- Kütüphane fonksiyonları
- Kullanıcı tanımlı işlevler
C'deki kitaplık ve kullanıcı tanımlı işlevler arasındaki fark, bir kitaplık işlevi için bir kod yazmamıza gerek olmamasıdır. Her zaman bir programın başına eklediğimiz başlık dosyasında zaten mevcuttur. Sadece bir fonksiyonun adını yazmanız ve uygun sözdizimi ile birlikte kullanmanız gerekir. Printf, scanf bir kütüphane işlevi örnekleridir.
Oysa, kullanıcı tanımlı bir işlev, bir işlevin gövdesini yazmamız ve işlevin programımızda bir işlem gerçekleştirmesini istediğimizde işlevi çağırmamız gereken bir işlev türüdür.
C'deki kullanıcı tanımlı bir işlev her zaman kullanıcı tarafından yazılır, ancak daha sonra 'C' kitaplığının bir parçası olabilir. Bu, 'C' programlamanın büyük bir avantajıdır.
C programlama fonksiyonları, aşağıdaki gibi üç aktiviteye ayrılmıştır:
- İşlev bildirimi
- Fonksiyon tanımı
- İşlev çağrısı
İşlev Beyanı
İşlev bildirimi, bir programın adını yazmak anlamına gelir. Kodda fonksiyonların kullanılması için zorunlu bir bölümdür. Bir işlev bildiriminde, programımızda kullanacağımız bir işlevin adını değişken bildirimi gibi belirtiriz. Bir programda bildirilmediği sürece bir fonksiyon kullanamayız. Bir işlev bildirimine "İşlev prototipi " de denir .
İşlev bildirimleri (prototip olarak adlandırılır) genellikle main () işlevinin üzerinde yapılır ve genel biçimi alır:
return_data_type function_name (data_type arguments);
- Return_data_type : çağıran açıklamaya geri döndürülen değer fonksiyonunun veri türüdür.
- İşlev_adı : parantez izlemektedir
- Veri türü bildirimleriyle birlikte bağımsız değişken adları isteğe bağlı olarak parantez içine yerleştirilir.
Bir tamsayı değişkeninin küp değerini hesaplamak için bir küp işlevinin nasıl tanımlanacağını gösteren aşağıdaki programı ele alıyoruz.
#include/*Function declaration*/int add(int a,b);/*End of Function declaration*/int main() {
Bir işlevin mutlaka bir değer döndürmediğini unutmayın. Bu durumda, void anahtar sözcüğü kullanılır.
Örneğin, output_message işlevi bildirimi, işlevin bir değer döndürmediğini belirtir: void output_message ();
İşlev Tanımı
İşlev tanımı, yalnızca bir işlevin gövdesini yazmak anlamına gelir. Bir işlevin gövdesi, belirli bir görevi yerine getirecek ifadelerden oluşur. Bir işlev gövdesi, tek veya bir ifade bloğundan oluşur. Aynı zamanda bir işlevin zorunlu bir parçasıdır.
int add(int a,int b) //function body{int c;c=a+b;return c;}
İşlev çağrısı
Bir işlev çağrısı, bir programda gerekli olduğunda bir işlevi çağırmak anlamına gelir. Bir işlevi ne zaman çağırsak, kendisi için tasarlandığı bir işlemi gerçekleştirir. Bir işlev çağrısı, bir programın isteğe bağlı bir parçasıdır.
result = add(4,5);
İşte kodun tamamı:
#includeint add(int a, int b); //function declarationint main(){int a=10,b=20;int c=add(10,20); //function callprintf("Addition:%d\n",c);getch();}int add(int a,int b) //function body{int c;c=a+b;return c;}
Çıktı:
Addition:30
İşlev Bağımsız Değişkenleri
Bir işlevin bağımsız değişkenleri, işlev çağrısı tarafından gerekli değerleri almak için kullanılır. Pozisyona göre eşleştirilirler; ilk bağımsız değişken ilk parametreye, ikincisi ikinci parametreye vb. aktarılır.
Varsayılan olarak, argümanlar, verilerin bir kopyasının çağrılan işleve verildiği değere göre iletilir . Gerçekte geçirilen değişken değişmeyecektir.
Değere göre geçirilen parametreleri gösteren aşağıdaki programı dikkate alıyoruz:
int add (int x, int y);int main() {int a, b, result;a = 5;b = 10;result = add(a, b);printf("%d + %d\ = %d\n", a, b, result);return 0;}int add (int x, int y) {x += y;return(x);}
Program çıktısı:
5 + 10 = 15
A ve b'nin değerlerinin add fonksiyonuna geçirildiğini, çünkü x parametresine sadece değerinin geçirildiğini unutmayın.
Değişken Kapsam
Değişken kapsam, programın bir kodu içindeki değişkenlerin görünürlüğü anlamına gelir.
C'de, bir işlevin içinde bildirilen değişkenler, bu kod bloğu için yereldir ve işlevin dışında başvurulamaz. Bununla birlikte, tüm işlevlerin dışında bildirilen değişkenler globaldir ve tüm programdan erişilebilir. Bir programın üstünde #define ile bildirilen sabitlere tüm programdan erişilebilir. Global değişkenin değerini hem ana hem de kullanıcı tanımlı fonksiyondan yazdıran aşağıdaki programı dikkate alıyoruz:
#includeint global = 1348;void test();int main() {printf("from the main function : global =%d \n", global);test () ;return 0;}void test (){printf("from user defined function : global =%d \n", global);}
Sonuç:
from the main function : global =1348from user defined function : global =1348
Program ayrıntılarını tartışıyoruz:
- Başlangıç değeri olarak 1348 olan bir tamsayı globale değişkeni tanımlıyoruz.
- Ne argüman alan ne de bir değer döndüren bir test () işlevi bildirir ve tanımlarız. Bu işlev, global değişkenlere programın herhangi bir yerinden erişilebileceğini göstermek için yalnızca globale değişken değerini yazdırır.
- Global değişkeni ana fonksiyonun içinde yazdırıyoruz.
- Global değişken değerini yazdırmak için test fonksiyonunu orde olarak çağırıyoruz.
C'de, bağımsız değişkenler işlev parametrelerine iletildiğinde, parametreler işlevden çıkarken yok edilecek yerel değişkenler olarak hareket eder.
Global değişkenleri kullandığınızda, bunları dikkatli kullanın çünkü hatalara yol açabilir ve programın herhangi bir yerinde değişebilir. Kullanmadan önce sıfırlanmaları gerekir.
Statik Değişkenler
Statik değişkenlerin yerel bir kapsamı vardır. Ancak, işlevden çıkarken yok edilmezler. Bu nedenle, statik bir değişken değerini sonsuza kadar korur ve işleve yeniden girildiğinde erişilebilir. Statik bir değişken bildirildiğinde başlatılır ve static önekine ihtiyaç duyar.
Aşağıdaki program statik bir değişken kullanır:
#includevoid say_hi();int main() {int i;for (i = 0; i < 5; i++) { say_hi();}return 0;}void say_hi() {static int calls_number = 1;printf("Hi number %d\n", calls_number);calls_number ++; }
Program şunları görüntüler:
Hi number 1Hi number 2Hi number 3Hi number 4Hi number 5
Özyinelemeli İşlevler
Aşağıdaki 6 olarak hesaplanan bir sayının faktöriyelini düşünün! = 6 * 5 * 4 * 3 * 2 * 1.
Bu hesaplama, olgu 1'e eşit olana kadar gerçeği * (olgu -1) tekrar tekrar hesaplayarak yapılır.
Özyinelemeli işlev, kendini çağıran ve özyinelemeli çağrıları bitirmek için bir çıkış koşulu içeren bir işlevdir. Faktöriyel sayı hesaplaması durumunda, çıkış koşulu gerçekte 1'e eşittir. Özyineleme, çıkış koşulu doğru olana kadar çağrıları "yığınlayarak" çalışır.
Örneğin:
#includeint factorial(int number);int main() {int x = 6;printf("The factorial of %d is %d\n", x, factorial(x));return 0;}int factorial(int number) {if (number == 1) return (1); /* exiting condition */elsereturn (number * factorial(number - 1));}
Program şunları görüntüler:
The factorial of 6 is 720
Burada program ayrıntılarını tartışıyoruz:
- Bir tamsayı parametresi alan ve bu parametrenin faktöriyelini döndüren özyinelemeli faktöriyel fonksiyonumuzu açıklıyoruz.Bu fonksiyon kendisini çağıracak ve çıkışa veya temel koşula ulaşılana kadar sayıyı azaltacaktır. Koşul doğru olduğunda, önceden oluşturulan değerler birbiriyle çarpılır ve son faktöriyel değer döndürülür.
- "6" değerine sahip bir tamsayı değişkeni bildirip başlatıyoruz ve sonra faktöriyel fonksiyonumuzu çağırarak faktöriyel değerini yazdırıyoruz.
Temel duruma veya durdurma durumuna ulaşılıncaya kadar işlevi kendi kendine çağırmaktan oluşan özyinelemeli mekanizmayı daha iyi anlamak için aşağıdaki tabloyu düşünün ve bundan sonra önceki değerleri topluyoruz:
Satır İçi İşlevler
C programlamadaki fonksiyon, en sık kullanılan talimatları saklamak için kullanılır. Programı modülerleştirmek için kullanılır.
Bir işlev çağrıldığında, komut işaretçisi işlev tanımına atlar. Bir fonksiyon çalıştırıldıktan sonra, komut işaretçisi fonksiyon tanımına sıçradığı yerden ifadeye geri döner.
Fonksiyonları kullandığımızda, fonksiyon tanımına atlamak ve ifadeye dönmek için fazladan bir işaretçi kafasına ihtiyacımız var. Bu tür işaretçi kafalarına olan ihtiyacı ortadan kaldırmak için satır içi işlevleri kullanıyoruz.
Satır içi bir işlevde, bir işlev çağrısı doğrudan gerçek bir program koduyla değiştirilir. Tüm işlemler satır içi işlev içinde gerçekleştirildiği için herhangi bir bloğa atlamaz.
Satır içi işlevler çoğunlukla küçük hesaplamalar için kullanılır. Büyük bilgi işlem söz konusu olduğunda uygun değildirler.
Bir satır içi işlev normal işleve benzerdir, tek fark satır içi anahtar kelimenin işlev adından önce yer almasıdır. Satır içi işlevler aşağıdaki sözdizimi ile oluşturulur:
inline function_name (){//function definition}
Satır içi bir işlevi uygulamak için bir program yazalım.
inline int add(int a, int b) //inline function declaration{return(a+b);}int main(){int c=add(10,20);printf("Addition:%d\n",c);getch();}
Çıktı:
Addition: 30
Yukarıdaki program, iki sayının eklenmesi için bir satır içi işlevin kullanımını göstermektedir. Gördüğümüz gibi, satır içi işlev içindeki iki sayıya toplamayı yalnızca fazladan satır yazmadan döndürdük. İşlev çağrısı sırasında, toplama işlemi gerçekleştirmemiz gereken değerleri aktardık.
Özet
- Bir işlev, bir mini program veya bir alt programdır.
- Programın modüler hale getirilmesi için fonksiyonlar kullanılır.
- Kitaplık ve kullanıcı tanımlı iki tür işlevdir.
- Bir işlev bir bildirim, işlev gövdesi ve bir işlev çağrısı bölümünden oluşur.
- İşlev bildirimi ve gövde zorunludur.
- Bir programda işlev çağrısı isteğe bağlı olabilir.
- C programının en az bir işlevi vardır; ana işlevdir ().
- Her işlevin bir adı, veri türü dönüş değeri veya geçersiz, parametreleri vardır.
- Her işlev C programınızda tanımlanmalı ve bildirilmelidir.
- Unutmayın ki bir C fonksiyonundaki sıradan değişkenler, fonksiyon çağrısından çıkar çıkmaz yok edilir.
- Bir işleve iletilen argümanlar, adrese göre değere göre aktarılmadıkları için değiştirilmeyecektir.
- Değişken kapsamı, bir program içindeki değişkenlerin görünürlüğü olarak adlandırılır
- C programlamada global ve yerel değişkenler vardır