Preprocessor kullanımı?

Başlatan Maxim, 06 Ocak 2014, 21:29:56

Maxim

bilmiyorum nasıl kullanılan birşey
bana genel olarak anlatabilirmisiniz kullanımını?
nedir ne işe yarar niye kullanılır gibi



yldzelektronik

Bildiğim kadarıyla;

Ön işlemci komutları.

İşlem yapılmadan evvel bildiri olarak kullanılır.

Derleyici ile konuşmanı sağlar.Derleyiciye yapması gerekenleri söylediğin komutlardır.

#include <stdio.h> ile derleyiciye sdtio.h dosyasını dahil etmesini söylersin.

#if sart

#else -if-

#endif

ile derleyiciye bu şartları sağlayan durumdalar için içersindeki kodları işle  dersin.

Yani compile time değil de ondan önceki kısımlarda çalışan kodlar.

Yani sen derle komutunu verdin ama derlemeye başlamadan önce bu komutlar işlenir ve bu komutlara göre derleme işlemi yapılır.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

robomaster

Kaynak kodu derlemeye hazırlayan ön direktiflerdir.
Mesela

#define out rc0_bit

Diye bir ifade yazarsak derleyici out gördüğü yerlere rc0_bit yapıştırıverir ve sonra derler. Bizde kolay kod yazmış ve takip etmiş oluruz. Burada out bizim taktığımız bir ad ve rc0_bit derleyicinin normalde tanıdığı bir ifadedir.

Diğer bazı pure direktifler
# (null directive) #define
#elif
#else
#endif
#error
#if #ifdef
#ifndef
#include
#line
#undef




Gökhan BEKEN

Sadece tek bir amacı yok,
bir programın derleyiciye göre farklı kodlar seçmesini,
kullanıcıya sabitler tanımlatmak, mesela kristal frekansı tercihi gibi
kullanıcıya modül modül seçim şansı vermek, lcd aktif olsun, sensörler pasif olsun gibi
artık gerisi hayal gücünüze kalmış
bu konuda bir yazı yazmıştım: http://gokhanbeken.com/ayni-programin-bir-suru-derleyicide-derlenebilmesi
Özel mesaj okumuyorum, lütfen göndermeyin.

berat23

Alıntı yapılan: yldzelektronik - 06 Ocak 2014, 21:44:00
Bildiğim kadarıyla;

Ön işlemci komutları.

İşlem yapılmadan evvel bildiri olarak kullanılır.

Derleyici ile konuşmanı sağlar.Derleyiciye yapması gerekenleri söylediğin komutlardır.

#include <stdio.h> ile derleyiciye sdtio.h dosyasını dahil etmesini söylersin.

#if sart

#else -if-

#endif

ile derleyiciye bu şartları sağlayan durumdalar için içersindeki kodları işle  dersin.

Yani compile time değil de ondan önceki kısımlarda çalışan kodlar.

Yani sen derle komutunu verdin ama derlemeye başlamadan önce bu komutlar işlenir ve bu komutlara göre derleme işlemi yapılır.

anlatım doğru ama bunlar compile time'da çalışır. daha öncesi kodlama aşaması zaten.

Tagli

Özetle, derleme işleminden önce kaynak kodu dosyalarını işleyen bir program. Dosyanın içinde sadece kendi ilgilendiği # ile başlayan komutlar var. Bunlara göre kaynak dosyasını (mesela .c dosyası) değiştiriyor. İçinde eklemeler veya çıkarmalar yapıyor. Daha sonra bu değiştirilmiş dosyalar derleyiciye gönderiliyor.
Gökçe Tağlıoğlu

Maxim

anladığım şu
atama, değer bildirme, tanımlama ,seçenek..

peki daha komplike bir takla atılabilirmi?
mesela hesap yaptırılabilirmi?

örnek:
adc den raw_temp değeri okunduğu zaman bunu otomatik hesap yapma gibi?

x = (1.250 * raw_temp) / 3
x = ( x + 10 ) - 1

berat23

Alıntı yapılan: Maxim - 07 Ocak 2014, 05:37:55
anladığım şu
atama, değer bildirme, tanımlama ,seçenek..

peki daha komplike bir takla atılabilirmi?
mesela hesap yaptırılabilirmi?

örnek:
adc den raw_temp değeri okunduğu zaman bunu otomatik hesap yapma gibi?

x = (1.250 * raw_temp) / 3
x = ( x + 10 ) - 1

yapar ama compile time'da yapar, yani işlemleri siz değil compiler yapmış olur. preprocessor direktifleri ile run time'da artimetik işlem yapamazsınız.

muhittin_kaplan

#9
maxim hocam,

kodlar derlenmeden önce hangi kodun derleneceğine karar veriryor, hesapta yaptırabilirsin. ama çalışma anında değil önceden hesabı yapar sonucu derler.



mesaj birleştirme:: 07 Ocak 2014, 09:21:37

yukardaki verdiğin örnek, çalışma anında okunan raw_temp içeriyor. Çalışma başlamadığı için bu işlemi yapamaz gibi geliyor :s

yldzelektronik

Abi özetle preprocessor komutlar asm çıktı almaya yaramaz.Yalnızca senin yazdığın c kodlarıyla ilgili bildirimlerle ilgilenir.Senin yaptığın bildirimlere göre kodlarını toparlar falan...

Sonuçta asm çıktı aldırmaz,asm ye çeviren programa yapması gerekenleri söyler.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.