Örneklerle C Programlamadaki İşlevler: Özyinelemeli ve Satır İçi

C'de Fonksiyon Nedir?

C programlamada 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, fonksiyon adı verilen çeşitli alt programlara bölünmüştür.

C'de Fonksiyon Nedir?

Büyük bir programı çeşitli işlevlere böldüğünüzde, her işlevi ayrı ayrı yönetmek kolaylaşır. Programda bir hata oluştuğunda, hatalı fonksiyonları kolayca araştırabilir ve yalnızca bu hataları düzeltebilirsiniz. Gerektiğinde işlevleri kolayca arayabilir ve kullanabilirsiniz, bu da otomatik olarak zamandan ve yerden tasarruf sağlar.

Kütüphane Vs. Kullanıcı Tanımlı Fonksiyonlar

Her 'C' programında ana işlev olan en az bir işlev bulunur, 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:

  1. Kütüphane işlevleri
  2. Kullanıcı tanımlı işlevler

C'de kütüphane ve kullanıcı tanımlı fonksiyonlar arasındaki fark, kütüphane fonksiyonu için kod yazmamıza gerek olmamasıdır. Her zaman programın başına eklediğimiz başlık dosyasının içinde zaten mevcuttur. Bir işlevin adını yazmanız ve onu uygun sözdizimi ile birlikte kullanmanız yeterlidir. Printf, scanf bir kütüphane fonksiyonunun ö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'de kullanıcı tanımlı bir fonksiyon her zaman kullanıcı tarafından yazılır, ancak daha sonra 'C' kütüphanesinin bir parçası olabilir. Bu 'C' programlamanın önemli bir avantajıdır.

C programlama fonksiyonları üç etkinliğe ayrılır:

  1. fonksiyon bildirimi
  2. Fonksiyon tanımı
  3. işlev çağrısı

İşlev Beyanı

İşlev bildirimi, bir programın adının yazılması anlamına gelir. Kodlarda fonksiyonların kullanılması için zorunlu bir kısımdır. Bir fonksiyon bildiriminde, programımızda kullanacağımız fonksiyonun adını değişken bildirimi gibi belirtiriz. Bir programda bildirilmediği sürece bir işlevi kullanamayız. Bir fonksiyon bildirimine aynı zamanda “Fonksiyon” da denir. prototip".

İşlev bildirimleri (prototip olarak adlandırılır) genellikle ana () işlevin üzerinde yapılır ve genel biçimi alır:

return_data_type function_name (data_type arguments);
  • The return_data_type:, çağıran ifadeye geri döndürülen değer fonksiyonunun veri türüdür.
  • The fonksiyon adı: ardından parantez gelir
  • Argümanlar adlar isteğe bağlı olarak veri türü bildirimleriyle birlikte parantez içine alınır.

Bir tamsayı değişkeninin küp değerini hesaplamak için bir küp fonksiyonunun nasıl bildirileceğini gösteren aşağıdaki programı ele alalım

#include <stdio.h>
/*Function declaration*/
int add(int a,b);
/*End of Function declaration*/
int main() {

Bir fonksiyonun mutlaka bir değer döndürmesi gerekmediğini unutmayın. Bu durumda void anahtar sözcüğü kullanılır.

Örneğin, çıktı_mesajı işlev bildirimi, işlevin bir değer döndürmediğini belirtir: void çıktı_mesaj();

Fonksiyon Tanımı

İşlev tanımı, bir işlevin yalnızca gövdesini yazmak anlamına gelir. Bir işlevin gövdesi, belirli bir görevi gerçekleştirecek ifadelerden oluşur. Bir fonksiyon gövdesi tek veya bir ifade bloğundan oluşur. Aynı zamanda bir fonksiyonun zorunlu bir parçasıdır.

int add(int a,int b)	//function body	
{
	int c;
	c=a+b;
	return c;
}

işlev çağrısı

İşlev çağrısı, bir programda ihtiyaç duyulduğunda bir işlevin çağrılması anlamına gelir. Bir işlevi çağırdığımızda, tasarlandığı işlemi gerçekleştirir. İşlev çağrısı, bir programın isteğe bağlı bir parçasıdır.

  result = add(4,5);

İşte kodun tamamı:

#include <stdio.h>
int add(int a, int b);	//function declaration
int main()
{
	int a=10,b=20;
	int c=add(10,20); 	//function call
	printf("Addition:%d\n",c);
	getch();
}
int add(int a,int b)	//function body
{
	int c;
	c=a+b;
	return c;
}

Çıktı:

Addition:30

İşlev Argümanları

Bir fonksiyonun argümanları, fonksiyon çağrısıyla gerekli değerleri almak için kullanılır. Pozisyona göre eşleştirilirler; ilk argüman birinci parametreye, ikincisi ikinci parametreye vb. iletilir.

Varsayılan olarak, argümanlar değere göre iletilir çağrılan fonksiyona verinin bir kopyasının verildiği. Gerçekte iletilen değişken değişmeyecektir.

Değerle geçirilen parametreleri gösteren aşağıdaki programı ele alalım:

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ın çıktısı:

5 + 10 = 15

x parametresine yalnızca a ve b'nin değeri aktarıldığından, add işlevine iletilen a ve b değerlerinin değişmediğini unutmayın.

Değişken Kapsam

Değişken kapsamı, program kodundaki değişkenlerin görünürlüğü anlamına gelir.

C'de, bir fonksiyonun içinde bildirilen değişkenler o kod bloğunda yereldir ve fonksiyonun dışına başvurulamaz. Ancak, tüm işlevlerin dışında bildirilen değişkenler geneldir ve programın tamamından erişilebilir. Bir ile bildirilen sabitler #tanımlamak Bir programın en üstündekiler tüm programdan erişilebilir. Hem ana hem de kullanıcı tanımlı fonksiyondan global değişkenin değerini yazdıran aşağıdaki programı ele alalım:

#include <stdio.h>
int 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 =1348
from user defined function : global =1348

Program detaylarını tartışalım:

Değişken Kapsam

  1. Başlangıç ​​değeri olarak 1348'i içeren bir tamsayı global değişkeni bildiririz.
  2. Ne argüman alan ne de değer döndüren bir test() fonksiyonu bildirir ve tanımlarız. Bu işlev, genel değişkenlere programın herhangi bir yerinden erişilebileceğini göstermek için yalnızca genel değişken değerini yazdırır.
  3. Global değişkeni ana fonksiyonun içine yazdırıyoruz.
  4. Global değişken değerini yazdırmak için test fonksiyonunu çağırıyoruz.

C'de, fonksiyon parametrelerine argümanlar iletildiğinde, parametreler, fonksiyondan çıkarken yok edilecek olan yerel değişkenler gibi davranır.

Ne zaman kullanmak küresel değişkenler, bunları dikkatli kullanın çünkü hatalara yol açabilirler ve programın herhangi bir yerinde değişiklik yapabilirler. Kullanmadan önce başlatılmaları gerekir.

Statik Değişkenler

Statik değişkenlerin yerel kapsamı vardır. Ancak fonksiyondan çıkıldığında yok edilmezler. Bu nedenle, statik bir değişken değerini sonsuza kadar korur ve fonksiyona 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:

#include <stdio.h>
void 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 1
Hi number 2
Hi number 3
Hi number 4
Hi number 5

Özyinelemeli İşlevler

Aşağıdaki şekilde hesaplanan bir sayının faktöriyelini düşünün 6! =6* 5 * 4 * 3 * 2 * 1.

Bu hesaplama, gerçek 1'e eşit olana kadar gerçek * (gerçek -1) tekrar tekrar hesaplanarak yapılır.

Özyinelemeli fonksiyon, 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 1'e eşittir. Özyineleme, çağrıları çıkış koşulu doğru olana kadar "yığarak" çalışır.

Örneğin:

#include <stdio.h>
int 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 */
  else
    return (number * factorial(number - 1));
}

Program şunları görüntüler:

 The factorial of 6 is 720

Programın detaylarını burada tartışıyoruz:

Özyinelemeli İşlevler

  1. Bir tamsayı parametresi alan ve bu parametrenin faktöriyelini döndüren özyinelemeli faktöriyel fonksiyonumuzu ilan ediyoruz. 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.
  2. “6” değerine sahip bir tamsayı değişkeni tanımlayıp başlatıyoruz ve ardından faktöriyel fonksiyonumuzu çağırarak onun faktöriyel değerini yazdırıyoruz.

Temel durum veya durdurma koşuluna ulaşılana kadar fonksiyonun kendisini çağırarak devam eden ve sonrasında önceki değerleri topladığımız yinelemeli mekanizmayı daha iyi anlamak için aşağıdaki tabloyu inceleyin:

Özyinelemeli İşlevler

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 fonksiyon çağrıldığında talimat işaretçisi fonksiyon tanımına atlar. Bir işlevi çalıştırdıktan sonra, talimat işaretçisi, işlev tanımına atladığı ifadeye geri döner.

İşlevleri her kullandığımızda ekstra bir şeye ihtiyaç duyarız işaretçi Fonksiyon tanımına atlamak ve ifadeye geri dönmek için head tuşuna basın. 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 inline fonksiyonu içerisinde gerçekleştirildiği için herhangi bir bloğa atlama yapmaz.

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.

Satır içi bir fonksiyon, inline anahtar sözcüğünün fonksiyon adından önce yerleştirilmesi dışında normal fonksiyona benzer. Satır içi fonksiyonlar aşağıdaki sözdizimiyle oluşturulur:

inline function_name ()
{
    //function definition
}

Satır içi fonksiyonu uygulayacak 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 satır içi fonksiyonun kullanımını göstermektedir. Görüldüğü gibi satır içi fonksiyon içerisinde sadece fazladan satır yazmadan iki sayının toplamasını geri döndürdük. İşlev çağrısı sırasında, toplama işlemi yapmamız gereken değerleri henüz aktardık.

ÖZET

  • Bir fonksiyon bir mini program veya bir alt programdır.
  • Fonksiyonlar programı modülerleştirmek için kullanılır.
  • Kütüphane ve kullanıcı tanımlı iki tür fonksiyondur.
  • Bir fonksiyon; bildirim, fonksiyon gövdesi ve fonksiyon çağrı kısmından oluşur.
  • İşlev beyanı ve metni 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 fonksiyondur ().
  • Her işlevin bir adı, dönüş değeri veri türü veya geçersiz parametreleri vardır.
  • Her fonksiyonun C programınızda tanımlanması ve bildirilmesi gerekir.
  • Sıradan olduğunu unutmayın bir C fonksiyonundaki değişkenler işlev çağrısından çıktığımız anda yok edilirler.
  • Bir işleve iletilen argümanlar, değere göre iletilmediğinden adrese göre değiştirilmeyecektir.
  • Değişken kapsamı, bir program içindeki değişkenlerin görünürlüğü olarak adlandırılır.
  • Global ve yerel değişkenler var C programlama