C Programlama diliyle şamatalar

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

OxfordBlue

Hocam burada HighByte char yani 8 tabanında;
FinalByte=((HighByte<<8)&0xFF00)+LowByte;


şimdi bu şekilde sizin dediğiniz gibi doğru sonucu elde edebilirmiyim ?

Gökhan BEKEN

0xFF00 ile and'lemeniz şart değil, el alışkanlığı. Doğru sonucu elde edip edemeyeceğinizi anlamak kolay, bilgisayarınıza  devc++ IDE'yi kurun yeni bir proje oluşturun ve sonucu ekrana basın, bu yöntem ilerde çok işinize yarar.
Özel mesaj okumuyorum, lütfen göndermeyin.

OxfordBlue

Teşekkürler, aşağıdaki sorumada bakabilirmisiniz?

unsigned char A1=2;
unsigned char Z=0;

switch (Z)
{
CASE 0:
..
BREAK;
CASE 1:
....
BREAK;
CASE A1:
...
BREAK;
}

2 'yi A1 yerine kullanabilirmiyim, başka uygulamalarda buna ihtiyacım olcak.

Gökhan BEKEN

Bu soruların xc8 ile direkt alakası olmadığı için "C Programlama diliyle şamatalar" adlı başlığın altına sormanızı rica ederim.
https://www.picproje.org/index.php?topic=35908.210

soruya gelecek olursak,
unsigned char A1=2;
unsigned char Z=0;

switch (Z)
{
CASE 0:
..
BREAK;
CASE 1:
....
BREAK;
CASE 2: //A1 (istediğinizi yazabilirsiniz)
...
BREAK;
}

dediğiniz bu ise olur, ancak madem kullanmayacaktınız A1'i neden tanımladınız ki?
Özel mesaj okumuyorum, lütfen göndermeyin.

OxfordBlue

MB.c:1752: error: (188) constant expression required
MB.c:2518: error: (195) expression syntax

2 yerine A1 yazarsam aldığım hata.

A1i kullanıcam A1 değişerek devam edicek

CASE (DEĞİŞKEN) bu şekilde kullanmam gerekiyor

RaMu

#995
Olmaz demiş zaten derleyici,
(Case karşısında bir sabit olması gerekiyor demiş hata mesajında)
switch case ile ilgili derleyicilerin çıktılarını gösteren
bir konu vardı yakın zamanda, onu bulsan faydası olur.

Case de değişken olması neden lazım?
Asıl yapılmak istenen ne?
Başka yolları bulunabilir.

mesaj birleştirme:: 10 Eylül 2015, 17:47:23

İlgili konu: (bu  konunun tamamında güzel bilgiler var, incelenmeli)
https://www.picproje.org/index.php/topic,60842.msg470809.html#msg470809
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

OxfordBlue

   switch(A1_Reg)
        {
               case 1:
                    SettingFactoryArray[A1_Reg]=RCREG;
                    DataLength_SettingsA1=SettingFactoryArray[A1_Reg];
                    A1_CheckSum_Low=A1_CheckSum_Low+SettingFactoryArray[A1_Reg];
                    break;

                default:
                    SettingFactoryArray[A1_Reg]=RCREG;
                    A1_CheckSum_Low=A1_CheckSum_Low+SettingFactoryArray[A1_Reg];
                    break;

                 case 96:
                    A1_CheckSum_High=A1_CheckSum_Low/256;
                    A1_CheckSum_Low=A1_CheckSum_Low%256;
                    SettingFactoryArray[A1_Reg]=RCREG;
                    if(SettingFactoryArray[A1_Reg]!=A1_CheckSum_Low){SerialRestBit=1;}
                    break;

                case 97:
                    SettingFactoryArray[A1_Reg]=RCREG;
                    if(SettingFactoryArray[A1_Reg]!=A1_CheckSum_High){SerialRestBit=1;}
                    break;

                case 98:
                    SettingFactoryArray[A1_Reg]=RCREG;
                    if(SettingFactoryArray[A1_Reg]!=0xFD){SerialRestBit=1;}
                    break;
        }
           FactorySettingsCheck();
           A1_Reg++;
           if(A1_Reg==DataLength_SettingsA1){SerSelect=4;A1_Reg=0;}
           Settings_A1_Fin:
            __delay_us(1);


Burada uart haberleşmenin alınan kısımları var.

Burada 96 yerine  DataLength_SettingsA1-3
            97 yerine  DataLength_SettingsA1-2
            98 yerine  DataLength_SettingsA1-1

kullanmam gerekiyor cunku datalength değişken umarım anlatabilmişimdir.

if-else if -else komutuyla bu yapılabiliyor fakat ben switch - case yapısı tercih ediyorum.


engerex

Şöyle bir fonksiyon tanımladım
void fonk1(void) {
deger1 = 12;
}


Şöyle çağırdım
fonk1; // yol 1 //deger1 = 0;
fonk1(); //yol 2 //deger1 = 12;


Her iki yolda da hata vermiyor ancak parantezli şekilde çağırdığımda sorun yok.
Boş parantezin olması veya olmaması ne anlama gelir? Standart ne diyor? Uygulamada durum nedir?

mufitsozen

#999
Alıntı yapılan: engerex - 27 Ekim 2015, 23:36:17
Şöyle bir fonksiyon tanımladım
void fonk1(void) {
deger1 = 12;
}


Şöyle çağırdım
fonk1; // yol 1 //deger1 = 0;
fonk1(); //yol 2 //deger1 = 12;


Her iki yolda da hata vermiyor ancak parantezli şekilde çağırdığımda sorun yok.
Boş parantezin olması veya olmaması ne anlama gelir? Standart ne diyor? Uygulamada durum nedir?

fonksiyonu cagirmak icin parantez ler sart. Aksi takdirde sadece fonksiyon adresini bir satira yazmis gibi oluyorsunuz. Bu herhangi bir expression yazmak ama kullanamak gibi

ornegin:

      int i;
      57+24;
      ı=75;

57+24; satiri hesaplanir sonrada hicbir islem vermediginiz icin gormezden gelinir(ignored) ve program akisi devam eder.

Sizin orneginizde de fonk1; satirinda fonk1 fonksiyonun adresini deger olarak giriyor ve hicbir islem yapmiyorsunuz.

Bu tip standard disi denemeleri niye yaptiginizida acikcasi ben cok merak ettim? Ne bulmayi umuyorsunuz?


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


engerex

Alıntı yapılan: mufitsozen - 27 Ekim 2015, 23:46:50
fonksiyonu cagirmak icin parantez ler sart. Aksi takdirde sadece fonksiyon adresini bir satira yazmis gibi oluyorsunuz. Bu herhangi bir expression yazmak ama kullanamak gibi

ornegin:

      int i;
      57+24;
      ı=75;

57+24; satiri hesaplanir sonrada hicbir islem vermediginiz icin gormezden gelinir(ignored) ve bir program akisi devam eder.

Sizin orneginizde de fonk1; satirinda fonk1 fonksiyonun adresini deger olarak giriyor ve hicbir islem yapmiyorsunuz.

Bu tip standard disi denemeleri niye yaptiginizida acikcasi ben cok merak ettim? Ne bulmayi umuyorsunuz?




C'yi yeni yeni öğreniyorum. Yazdığım kodu parantez koymadan çalıştırdım. Haliye problem oldu. Bir müddet takıldım ve parantezden olduğunu farkettim. Bug mu derken başka derleyici ile teyit ettim aynı ve sormak istedim. Ayrıca az önceki denemelerimde belirttiğiniz örneklerdeki gibi tek başına i; kodlayınca da bir hata yok.
Cevap bilgilendiriciydi. Teşekkürler. Yalnız şunu da sormak istiyorum. Şu haliyle bu kodlamalar bir anlam ifade etmiyor gibi görünüyor. Peki neden bu satırlarda hata veya uyarı yok? Yoksa bir incelik mi var?

mufitsozen

Alıntı yapılan: engerex - 28 Ekim 2015, 00:18:37
C'yi yeni yeni öğreniyorum. Yazdığım kodu parantez koymadan çalıştırdım. Haliye problem oldu. Bir müddet takıldım ve parantezden olduğunu farkettim. Bug mu derken başka derleyici ile teyit ettim aynı ve sormak istedim. Ayrıca az önceki denemelerimde belirttiğiniz örneklerdeki gibi tek başına i; kodlayınca da bir hata yok.
Cevap bilgilendiriciydi. Teşekkürler. Yalnız şunu da sormak istiyorum. Şu haliyle bu kodlamalar bir anlam ifade etmiyor gibi görünüyor. Peki neden bu satırlarda hata veya uyarı yok? Yoksa bir incelik mi var?

cunku bir hata yok. bir "expression" yaziyorsunuz ve sonra onu kullanmiyorsunuz.

Haliyle c compiler sizin hur iradenizle karar alan, zeki , bilgili ve yetiskin bir insan oldugunuzu dusunuyor ve sizi uyarmiyor (gerci derleyici ayarlari ile oynayarak bir warning almak mumkundur herhalde ama artik onuda siz arastirin)

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

RaMu

Derleyiciye göre değişiyor olabilir,
ccsc tam bir c derleyicisi değil ama
kodun bir etkisi yok diye uyarı veriyor:

Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

erenbasturk

#1004
Eğer yazdığınız fonksiyonları, main'den önce yazdıysanız derleyici size duruma göre uyarı yada hata mesajı gönderecektir. Eğer fonksiyonu başka bir kaynak dosyasında yada main fonksiyonundan sonra yazıp fonksiyon prototipini belirtmediyseniz, bu tür hatalarla karşılaşabilirsiniz çünkü derleyicinin bu fonksiyonun paremetreleri hakkında bir bilgisi yok. Bu nedenle main'den sonra kullanılan fonksiyonlar için fonksiyon prototipi kullanılmalı.

Alıntı yapılan: engerex - 28 Ekim 2015, 00:18:37
C'yi yeni yeni öğreniyorum. Yazdığım kodu parantez koymadan çalıştırdım. Haliye problem oldu. Bir müddet takıldım ve parantezden olduğunu farkettim. Bug mu derken başka derleyici ile teyit ettim aynı ve sormak istedim. Ayrıca az önceki denemelerimde belirttiğiniz örneklerdeki gibi tek başına i; kodlayınca da bir hata yok.
Cevap bilgilendiriciydi. Teşekkürler. Yalnız şunu da sormak istiyorum. Şu haliyle bu kodlamalar bir anlam ifade etmiyor gibi görünüyor. Peki neden bu satırlarda hata veya uyarı yok? Yoksa bir incelik mi var?

mesaj birleştirme:: 28 Ekim 2015, 13:47:33

Alıntı yapılan: OxfordBlue - 10 Eylül 2015, 16:17:56
Teşekkürler, aşağıdaki sorumada bakabilirmisiniz?

unsigned char A1=2;
unsigned char Z=0;

switch (Z)
{
CASE 0:
..
BREAK;
CASE 1:
....
BREAK;
CASE A1:
...
BREAK;
}

2 'yi A1 yerine kullanabilirmiyim, başka uygulamalarda buna ihtiyacım olcak.
Alıntı yapılan: OxfordBlue - 10 Eylül 2015, 16:17:56
Teşekkürler, aşağıdaki sorumada bakabilirmisiniz?

unsigned char A1=2;
unsigned char Z=0;

switch (Z)
{
CASE 0:
..
BREAK;
CASE 1:
....
BREAK;
CASE A1:
...
BREAK;
}

2 'yi A1 yerine kullanabilirmiyim, başka uygulamalarda buna ihtiyacım olcak.

c dilinde switch-case ile degişken, ondalıklı sayı kullanamazsınız. A2 içinde sabit bir değerde olsa A2 bir degişkendir. Eğer case ile bir integer değişken tanımlamak isterseniz. bunu 'const' ile tanımlayarak kullanabilirsiniz yada #define a2 2 gibi bir ifade kullanabilirsiniz. Bu durumda derleyiciye göre degişebilir.