Makro problemi

Başlatan leventcinar2000, 20 Kasım 2013, 15:02:01

leventcinar2000

Merhaba arkadaşlar

Hi-Tech C 9.xx kullanıyorum

Aşağıdaki gibi bir durumla karşılaştım

#define       saat        20
#define       dakika     30
#define       saniye     45
#define       sure         ((3600*saat)+(60*dakika)+saniye)

bu yapıyı aşağıdaki gibi kullanıyorum


unsigned long k;
for(k=sure; k>0; k--)
{

}

saat:dakika:saniye girilen değerler ile sure oluşturuluyor. Değer 65535 ten büyük ise taşma oluyor. Fakat
#define       sure      200000
gibi doğrudan değer atandığında bir sorun olmuyor.

Bununla ilgili Compiler ayarları var mı
Ben bir göz gezdirdim. Bilmediğim yada gözümden kaçmış ta olabilir
Yardımcı olabilir misiniz



CLR

Aşağıdaki gibi deneyiver.

#define       sure        (unsigned long)((3600*saat)+(60*dakika)+saniye)
Knowledge and Experience are Power

Mr.Java

Sen tam olarak ne yapmak istiyorsun ? Macro oluşturarak hesap kitapla zamanlayıcı kurman işlemciyi yorar.Bunun yerine timer kurarsın belirli bir kesmeden sonra kontrol yaptırırsın ve istediğin zaman istediğini yaparsın.Long değişkeni çok fazla yer kaplar,gereksiz yer kaplar ve yorar.

leventcinar2000

#define       sure        (unsigned long)((3600*saat)+(60*dakika)+saniye)

#define       sure        (unsigned long)((unsigned long)(3600*saat)+(60*dakika)+saniye)

gibi yapıları denedim düzelme olmadı

çalışan program çok basit olduğundan işlemciyi fazla kasmıyor

Derliyicide bununla ilgili bir ayar var mı acaba

JKramer

Bu hesaplar zaten derleme zamanında yapılıyor, işlemciyi yoran bir şey yok.

...3600UL*saat... şeklinde olabilir.

cicjoe

Hocam integer gibi gordugu icin 2 byte yer ayiriyor. Herhangi birinin sonuna suffix koyarak hallolur gibi.
#define       saat        20ul    veya 20ull
Verilen orneklerde carpma islemi bittikten sonra cast edildiginden, zaten overflow olmus sonuc uzerinden tur donusumu yapilmis.
(((unsigned long)3600*saat)+(60*dakika)+saniye)
seklinde de deneyebilirsiniz.

Mr.Java

Alıntı yapılan: gerbay - 21 Kasım 2013, 09:41:44
makroya sabit geçerse derleme zamanında yapılıyor, makroya değişken geçerse kod üretilip runtime da yapılıyor..
+1

leventcinar2000

Teşekkürler arkadaşlar

#define       saat        20UL

yapılınca problem çözüldü