Keil'de C++ bir projede goto deyimi kullanımı

Başlatan NaMcHo, 05 Mayıs 2012, 16:57:50

NaMcHo

Merhabalar,
Şöyle bir kodum var
            if((flag&0x01)==ADCBITTI)
            {
                   //TIM7->CR1&=0xFFFE;              // Counter disable
                   //ADC_tampon kontrolü
                   if((ADC_tampon[N-1]-ADC_tampon[0]>60) || (ADC_tampon[0]-ADC_tampon[N-1]>60))                       
                        goto ADC_tampon_uyusmazligi;

                   //ADC_tampon kontrolü bitim

                  dma_kur(N,((UINT32)&ADC_tampon[0]),((UINT32)&M2M[0]));
                  DMA2_Stream1->NDTR=N;              //210 adet veri transfer edilcek.16 bitlik
                  DMA2_Stream1->CR|=1;                //DMA aktif edildi.
                  indeksara_2();                      //DAC_tampon indexsi bulunuyor.

                  //Bu arayı filtre işlemleri olarak düşünebilirim.
                  for(volatile UINT16 olesine=0;olesine<10000;olesine++);

                  indeksara_1();                          //index_1 tespit edildi
                  while(!(flag&0x10));                 //M2M'e veriler kopyalanana kadar bekle
                  flag&=DMARESET;
                  dma_kur(N,((UINT32)&M2M[0]),((UINT32)&DAC_tampon[0]));
                  DMA2_Stream1->NDTR=N;                //210 adet veri transfer edilcek.16 bitlik
                  
                  while(1){
                        if((dac_tampon_sayac-index_2)==0){
                              TIM7->CR1&=0xFFFE;                  //TIM7 kapat                              
                              break;}
                  }
                  DMA2_Stream1->CR|=1;                 //DMA aktif edildi.    
                  dac_tampon_sayac=index_1;           //yeni index değeri burdan itibaren DAC'a basılcak veriler                               
                  while(!(flag&DMABITTI));
                  TIM7->CR1|=0x0001;                 //TIM7 aktif DAC'a veriler basılıyor.
                  flag&=ADCRESET;      
            }

            ADC_tampon_uyusmazligi : 
            else if((flag&0x10)==DMABITTI)                   //Yeni ADC çevrimi alıncak
            {                     
                  ADC1->CR2|=ADON; 
                  analog1.TETIKLE(1,SWTRIGGER);       
                  flag&=DMARESET;     
            }     
      }           


Burada "if((ADC_tampon[N-1]-ADC_tampon[0]>60) || (ADC_tampon[0]-ADC_tampon[N-1]>60))" bu şart sağlandığında program akışını değiştirmek istiyorum(yani  if((flag&0x01)==ADCBITTI) bu if deyiminden çıkmak istiyorum) ve bunu goto ile yapmayı denediğimde main.cpp(121): error:  #127: expected a statement derleme hatasını alıyorum.
Hatanın sebebi nedir ve nasıl düzeltebilirim?

Klein

#1
else if deyiminin başına göndermek istediğiniz için bu hatayı alıyorsunuz.

else if yerine
şartı bir önceki cümleden ayırıp aşağıdaki gibi düzenlerseniz, goto sorun çıkarmaz.

benim tercihim Goto kullanmak yerine şart cümlesinden "break" ile çıkmak olurdu.

if ((flag&0x01) !=ADCBITTI && (flag&0x10)==DMABITTI)                    //Yeni ADC çevrimi alıncak
            {                     
                  ADC1->CR2|=ADON; 
                  analog1.TETIKLE(1,SWTRIGGER);       
                  flag&=DMARESET;     
            }