C Programlama diliyle şamatalar

Başlatan z, 23 Ekim 2011, 15:32:04

Tagli

spam'ın etrafında köşeli parantez olmamalı. Kod neden öyle yazılmış anlamadım.

#define [spam] baska_bir_ad gibi birşey yapılabilir mi bilmiyorum ama #define içinde hiç köşeli parantez gördüğümü hatırlamıyorum.
Gökçe Tağlıoğlu

yldzelektronik

Alıntı yapılan: Tagli - 14 Şubat 2014, 11:58:50
spam'ın etrafında köşeli parantez olmamalı. Kod neden öyle yazılmış anlamadım.

#define [spam] baska_bir_ad gibi birşey yapılabilir mi bilmiyorum ama #define içinde hiç köşeli parantez gördüğümü hatırlamıyorum.

Herhangi bir yerde define tanımlaması da yok.Acaba pointer olma ihtimali var mı?Yani

char *[spam][3]] tarzı bir şey?Böyle bir tanımlama legal mıdır?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

muhittin_kaplan

int a=0x0000000F;
int b=0x00000000;
int c=0x00000000;

for (b=0;b<32;b++){
    c=a<<1;
}

yukardaki gibi çok basit olan kodda bir hata var mı ?

ercan_t

merhaba,

[spam][3] tarzı hiç tanımlamaya rastlamadım kodda tuaflık var
ama aşağıdaki gibi çok tanımlamalarda bulunmuştum bit düzeyinde limitleyerek tanımlama aşağıdaki struct tam 5 bayt(bitleri toplayın...) :)

örneğin ready 4 bit yer kaplıyor üstünü gecemez yani değeri 0-15 arası....

typedef struct __attribute__((__packed__)){
     unsigned ready:4;
     unsigned error_occured:1;
     unsigned disk_spinning:1;
     unsigned write_protect:1;
     unsigned head_loaded:1;
     unsigned error_code:8;
     unsigned track:9;
     unsigned sector:5;
     unsigned command:5;   
}DISK_REGISTER;

yldzelektronik

Öyle sanıyorum ki o tanımlamada iki boyutlu bir dizi tanımlanmaya çalışılmış.Çünkü yapıyı çağırırken de aynı şekilde çağırıyor.Ancak oradaki ifade pointer mi diye düşünüyorum.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Tagli

muhittin_kaplan, muhtemelen var. c hep aynı değeri alır, çünkü a<<1 işlemi a güncellenmediği için hep aynı değeri üretir. Bu durumda döngünün de bir anlamı kalmaz.

Döngünün içinin şu şekilde yazılması uygun olur: c = a << b;
Gökçe Tağlıoğlu

muhittin_kaplan

Tabi Ya. 0x0000000F i hep birkez sola kaydırıyorum. (Yaşlanıyorum Galiba :D)

mistek

Çalışma zamanlı olarak diziye string atanamıyor mu?

Örneğin
char dizi[10] = {0};
tanımlıyorum.

program içerisinde dizi[] = {"aliveli  "}; yazamıyorum derleyici hata veriyor. Kitaba hızlı bir göz gezdirdim ancak buladım.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

mufitsozen

Alıntı yapılan: mistek - 16 Şubat 2014, 23:09:53
Çalışma zamanlı olarak diziye string atanamıyor mu?

Örneğin
char dizi[10] = {0};
tanımlıyorum.

program içerisinde dizi[] = {"aliveli  "}; yazamıyorum derleyici hata veriyor. Kitaba hızlı bir göz gezdirdim ancak buladım.

strcpy yada strncpy
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

mistek

#759
Hocam hafızayı çok meşgul etmeyen komutlara ihtiyacım var. Bunların durumu nasıldır?

şuan bu şekilde yapıyorum
dizi[0] = 'A';
dizi[1] = 'l';
dizi[2] = 'i';
dizi[3] = 'V';
...
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

Klein

Malesef!
strcpy veya strncpy kullanabilirsiniz.
eğer stringleriniz sabit ise:

const char str1[] = {"String 1"};
const char str2[] = {"String 2"};

char *ptr;

void xxx(void)
{
    ptr = str1;
   ptr = str2;
}

şeklinde kullanabilirsiniz.

veya

const char StrTable[][] = {"String 1", "String 2", "String 3"};

char *ptr;

ptr = &StringTable[0][0];
ptr = &StringTable[1][0];

şeklinde kullanabilirsiniz.

yldzelektronik

Alıntı yapılan: mistek - 16 Şubat 2014, 23:17:03
şuan bu şekilde yapıyorum
dizi[0] = 'A';
dizi[0] = 'l';
dizi[0] = 'i';
dizi[0] = 'V';
...

Ve bütün dizi elemanlarına ulaşabiliyor musun?Bunu gerçekten yapabiliyor musun?

Çünkü her yerde dizi[0] var.

strcpy veya strncpy istemiyorsan for veya do while dene veya while(){i++;}?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

mistek

#762
2x16 lcdye yazı yazacağım normalde sprintf ile yazdırılacakları biçimlendirip LCD dizisine atıyordum sprintf bana 5kb alana mal oluyor.

lcd dizisi sabit içerisine yazılacaklar program içerisinde değişiyor.

Strcpy kullanıp kullandığı alana bakacağım.

Teşekkürler.



mesaj birleştirme:: 16 Şubat 2014, 23:28:41

Alıntı yapılan: yldzelektronik - 16 Şubat 2014, 23:22:00
Ve bütün dizi elemanlarına ulaşabiliyor musun?Bunu gerçekten yapabiliyor musun?

Çünkü her yerde dizi[0] var.

strcpy veya strncpy istemiyorsan for veya do while dene veya while(){i++;}?

Hocam buraya yanlış yazmışım dizi elemanları 1 artan sırada gidiyor.




mesaj birleştirme:: 16 Şubat 2014, 23:41:11

Aynı ifadeyi ekrana yazmak için strcpy ile daha fazla alan harcadım.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

mufitsozen

#763
Alıntı yapılan: mistek - 16 Şubat 2014, 23:27:46
2x16 lcdye yazı yazacağım normalde sprintf ile yazdırılacakları biçimlendirip LCD dizisine atıyordum sprintf bana 5kb alana mal oluyor.

lcd dizisi sabit içerisine yazılacaklar program içerisinde değişiyor.

Strcpy kullanıp kullandığı alana bakacağım.

Teşekkürler.



mesaj birleştirme:: 16 Şubat 2014, 23:28:41

Hocam buraya yanlış yazmışım dizi elemanları 1 artan sırada gidiyor.




mesaj birleştirme:: 16 Şubat 2014, 23:41:11

Aynı ifadeyi ekrana yazmak için strcpy ile daha fazla alan harcadım.

strcpy nasil cok alan harcar? gercek bir strcpy subroutine asagida!

char *strcpy(char *s1, const char *s2)
{
    char *s = s1;
    while ((*s++ = *s2++) != 0)
   ;
    return (s1);
}
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

mistek

#764
Alıntı yapılan: mufitsozen - 17 Şubat 2014, 09:07:12
strcpy nasil cok alan harcar? gercek bir strcpy subroutine asagida!

char *strcpy(char *s1, const char *s2)
{
    char *s = s1;
    while ((*s++ = *s2++) != 0)
   ;
    return (s1);
}

Hocam Keil derledikten sonra en altta verdiği bilgilere bakarak söylüyorum.

strcpy ile yaptığımda Code Size:27256
strcpy(arguman,"ABCDEFGH12345678");
Lcd_Cursor(1,1);
lcd_Puts(arguman);
            
strcpy(arguman,"ABCDEFGH12345678");
lcd_Cursor(2,1);
lcd_Puts(arguman);


sprintf ile yazdığımda Code Size: 27184
sprintf(arguman,"ABCDEFGH12345678");
lcd_Cursor(1,1);
lcd_Puts(arguman);
            
sprintf(arguman,"ABCDEFGH12345678");
lcd_Cursor(2,1);
lcd_Puts(arguman);
               
Optimizasyon Level 0
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R