Hi-Tech PICC Eğitim Dökümanı Fonksiyonların önemi.

Başlatan arslan74, 03 Şubat 2008, 03:02:53

arslan74

Merhaba,

Bölüm 5 de size basit bir fonksiyon nasıl yapılır ve bu fonksiyonları ayrı bir dosya hazırlanır projemize nasıl dahil edeceğimizi anlatmıştım.

Bu bahs ettiğim kısmına biraz değinmek istiyorum, nedenine gelince cok önemli bir konu olduğu için.

Bütün kodu tek bir dökümdanda yazmayıb, ayrı ayrı dökümda yazmanın faydalarından bir kaç tanesi:

1- Ana program cok kısa programdan oluştuğu için bir kod daha anlaşılır oluyor.

2- Sürekli kullanılan kodu yazmak yerine onun fonksiyonun yazıp sadece cağırmak hem kısa kod yazılmasına hemde işimizi kolaylaştırmaya yarıyor.

3- Önemli ve kapsamlı bir proje bir kac kişi cok rahatlıkla çalışabilir. Örneğin birisi tuş işlemlerinin, bir diğeri ekran işlemlerinin, bir başkasıda başka işlemlere ait kodları hazırlayabilir. Bu işlem sonunda projemizde kodlar birleştirilib derlenir. Böylelikle kod yazma yükü bir kişini üzerinden kalkmış olur.

4- Özel işlemerine ait kodlarınıza kütüphane hazırlarsınız. Bu işlemi bir kere yaparsınız daha sonra gerek duydukca sadece o kütüphaneyi projenize dahil etmiş olursunuz.

5- Başkasınız hazırladığı acık kaynak kütüphaneleri doğrudan kullanma şansına sahipsiniz.

O yüzden önemli işleri yapan kodları ana program içinde yazmayıb bir fonksiyona dahil etmek kod yazmayı ve sonradan yapılacak değişikliği cok kolaylaştırıyor. Ana programda yazdığınız kod ne işe yarıyor diye uğraşacağınıza, fonksiyon ismini yapacağı işleme göre secersek, doğrudan burada bu işlem yapılıyor diyebiliriz.

Selamlar

tyilgin

Merhaba,

Hemen hemen her projede kullanabileceğim ortak fonksiyonları bir kütüphane altında toplamak gerçekten güzel.

Ancak ana projeden ayırıp bunları ayrı bir c dosyası olarak tutarsam, derleme sırasında içinde kullanılan diğer kütüphanelerle ilgili fonksiyonlarda hata veriyor.

Örneğin kendi yaptığım kütüphanede bulunan bir fonksiyonda DelayMs() fonsiyonunu kullandığımda, Eğer kendi kütüphanemin başında #include <delay.c> ile tanıtırsam mükerrer tanımlama diyor. Tanıtmazsam da yine farklı bir hata veriyor.

Sanırım #IFDEF gibi komutları kullanmalısın diyeceksiniz ama onlar da ayrı bir dert. Ana programda tanıttığım bir değişkeni, bir kütüphanede #IFNDEF gibi bir komutla kontrol ederek tanımlı değilse desemde hatalar ile karşılaşıyorum.

Aslında en güzeli, bir örnekle konuyu size açmak belki ama, bu günlerde yoğun bir dönemden geçiyorum. Eğer sorunlarımı anlatabildiyem ve beni aydınlatailirseniz sevinirim.

Saygılar..

arslan74

Alıntı yapılan: "tyilgin"Merhaba,

Hemen hemen her projede kullanabileceğim ortak fonksiyonları bir kütüphane altında toplamak gerçekten güzel.

Ancak ana projeden ayırıp bunları ayrı bir c dosyası olarak tutarsam, derleme sırasında içinde kullanılan diğer kütüphanelerle ilgili fonksiyonlarda hata veriyor.

Örneğin kendi yaptığım kütüphanede bulunan bir fonksiyonda DelayMs() fonsiyonunu kullandığımda, Eğer kendi kütüphanemin başında #include <delay.c> ile tanıtırsam mükerrer tanımlama diyor. Tanıtmazsam da yine farklı bir hata veriyor.

Sanırım #IFDEF gibi komutları kullanmalısın diyeceksiniz ama onlar da ayrı bir dert. Ana programda tanıttığım bir değişkeni, bir kütüphanede #IFNDEF gibi bir komutla kontrol ederek tanımlı değilse desemde hatalar ile karşılaşıyorum.

Aslında en güzeli, bir örnekle konuyu size açmak belki ama, bu günlerde yoğun bir dönemden geçiyorum. Eğer sorunlarımı anlatabildiyem ve beni aydınlatailirseniz sevinirim.

Saygılar..

Merhaba,

senin derdin aslında cok basid bir cözümü var. Ona gecmeden neden hata verdiğine bakalım sonra kendliğinden sorunun cevabı gelecek.

Bu forumda daha öncede bu konuda biraz bahs etmiştim.

#include <delay.c>


ile

#include "delay.c"


cok farklı anlamlara geliyor. #include <delay.c> ile kücüktür ve büyüktür parantezi içine alımış ise, derleyici söyle bir bildirim yapiyoruz. sen bu dosyası kendi standart kütüphanelerin olduğu klasöre veya benim kendimin derleyiciye tanıtmış olduğum klasörlere bak, anlamını taşiyor. Şimdi sen o şekilde kullanacaksan. Bu dosya ya diğer standart kodların bulunduğu klasörün içinde olacak. Derleyici derlenken önce bu klasöre bakiyor, eğer orada bulamaz ise tanıtılmış bakşa klasörler varmı diye bakiyor eğer tanıtılmış başka klasörler var ise onlarında içine bakiyor. Eğer oralar da bulamamış ise başka yere bakmaz ve bulamadım diye hata verir. Yani senin projenin olduğu klasöre bakmaz.

Eğer proje klasörün içine bakmasını istiyorsan o zaman #include "delay.c" şeklinde bildirmen gerek. Bu sefer sadece proje klasöüne bakar başka yere bakmaz.

Eğer sen kendin genel fonksiyonlar için özel bir klasör yapmışsan bütün fonksiyonların bunun içinde ise yapman gereken bu klasörü derleyici bildirmek.

Ayar menüsünden "Directories" menüsüne gelin. "Show directories for:"  dan "Library Search Path" secin ve sonra "New" basarak projeniniz olduğu klasörü ekleyin.

O zaman sorunuzu cözülecektir.

Bazıları işin kolayına kacarak. Standart kodların bulunduğu klasörüe kopyalıyorlar. Bunu ben pek tavsiye etmiyorum. Cünkü klasör C ve Hi-Tech'in kendi standart kütüphanesine ait. Eğer standart birşey olsaydı kendileri zaten eklerlerdi. Kendimiz birşeyler eklediğimizde ise standartlığını bozuyoruz. Birde ilerde bu programı silmemiz gerekebilir o zaman bizim kodlarımızda silinir veya başka bir derleyiciyle çalıştığınızda kullanabilmeniz için derleycilerin standart klasörüne müdahale etmeyelim.

Selamlar

tyilgin

Cevabınız için çok teşekkür ederim. Ancak benim bahsettiğim sorun bu değil.

Size sorunumu, müsait bir zamanımda örnek kod yazarak bildirmek sanırım en güzeli.

Yoksa boşu boşuna zamanınızı almış olacağım.

Cevabınız için tekrar teşekkür ederim.