değişkenlerin davranışlarıyla ilgili yanlış anlamalar

 

bir uzman gibi derlersem

sonra StringVal değiştiğinde, yedekleme hemen değişir

son Baskı çağrılmadan

köpek nerede gömülü?

 extern string StringVal = "string" ;

       string backup = "" ;

int init() {
   Print ( "=========================" );
   Print ( "StringVal=" ,StringVal, "    backup=" ,backup);
   if (StringVal != backup){
      backup = StringVal;
       Print ( "StringVal=" ,StringVal, "< > backup=" ,backup);
   }
}

int start() { }
 

işte ikinci varyant

ilk atamadan sonra değişkenlerin bellekte aynı yeri gösterdiği ortaya çıktı.

  if (firsttime) { backup = StringVal; 

Bu kinoanın hangi yapıdan uzandığını bilmek istiyorum


işte bir örnek

 extern string StringVal = "string" ;

       string backup    = "" ;
       bool    firsttime = true ;
       
int init() {
   Print ( "=========================" );
   Print ( "StringVal=" ,StringVal, "    backup=" ,backup);
 
   if (StringVal != backup){
       if (firsttime) { backup = StringVal; Print ( " First Call ===> backup = StringVal" ); }
       Print ( "StringVal=" ,StringVal, "< > backup=" ,backup);
   }
   firsttime = false ;
}

int start() {  }
 
wlad :

bir uzman gibi derlersem

sonra StringVal değiştiğinde, yedekleme hemen değişir

son Baskı çağrılmadan

köpek nerede gömülü?


Pekala, StringVal'i manuel olarak değiştiriyorsunuz ve init hemen çalışıyor, bu doğru...
 

init() işlevinin çalıştığı açık

sorun şu ki 2. değişken, diğer koşullardan bağımsız olarak güncellenir

güncelleme için bir koşul yok - ancak güncelleme oluyor!

 
StringVal'i değiştirdiğinizde, ilk seferde false olarak da değiştirin
 

evet her şey açık

sorun şu ki 2. değişken, diğer koşullardan bağımsız olarak güncellenir

ve her zaman

CİDDİ VURUŞ

 

benzer bir örnek ver

ilk değişkenin değeri ikinci değişkene yalnızca bir kez iletilir ve ikinci değişkenin değeri programın daha sonraki yürütülmesi sırasında değişmemelidir .

ancak, birinci değişkendeki her değişiklikle, ikincisi de değişir ki bu değişmemelidir.

 extern string Value = "O" ;
       
string temp_= "" ;
bool    firsttime= true ;
       
int start() {
   string txt= StringConcatenate ( "  Value: " ,Value, "\n" ,
                                 "  temp_: " ,temp_, "\n" ,
                                 "  firsttime: " ,firsttime);    
   if (firsttime) { temp_=Value; firsttime= false ; } // значение присваевается тольо ОДИН раз   

   Print (txt);
   Comment (txt);                              
}
 
wlad :

benzer bir örnek ver

ilk değişkenin değeri ikinci değişkene yalnızca bir kez iletilir ve ikinci değişkenin değeri programın daha sonraki yürütülmesi sırasında değişmemelidir .

ancak, birinci değişkendeki her değişiklikle, ikincisi de değişir ki bu değişmemelidir.

Dış değişken değiştirildiğinde, EA yeniden başlatılır, bu da küresel düzeyde bildirilen değişkenlerin başlatılmasına yol açar. Her şey doğru. Bundan kaçınmak istiyorsanız - Global Değişkenleri kullanın.
 
Sepulca :
Dış değişken değiştirildiğinde, EA yeniden başlatılır, bu da küresel düzeyde bildirilen değişkenlerin başlatılmasına yol açar. Her şey doğru. Bundan kaçınmak istiyorsanız - Global Değişkenleri kullanın.

yanlış - başlatma yapılmadı

işte referanstan kanıt

Genel değişkenler, program istemci terminalinin belleğine yüklendikten hemen sonra başlatılır.

ve genel olarak, bu başlatmayla ilgili değil, bir değişkeni değiştirmekle ilgili

lütfen kodu dikkatlice okuyun

 

ve sorun yalnızca string türündeki değişkenlerde ortaya çıkar

diğer türlerde sorun yok!

 
wlad :

işte ikinci varyant

ilk atamadan sonra değişkenlerin bellekte aynı yeri gösterdiği ortaya çıktı.

Bu kinoanın hangi yapıdan uzandığını bilmek istiyorum


işte bir örnek

her zaman StringVal != backup koşuluna sahipsiniz ve ilk kez her zaman true olacaktır , çünkü (init) yalnızca bir kez başlatılır, ancak danışmanın HER yeniden başlatılmasında ve tf penceresi değiştirildiğinde, küme değiştirildiğinde yeni bir başlatma gerçekleşir. terminal başladığında değişti. Yani, StringVal'i değiştirdiğinizde init'i yeniden çalıştırırsınız.