capl中關於聲明變量並賦值的問題


今天同事在運行capl腳本時遇到一個問題,由於腳本內容太多,我把問題點寫成了demo,大概是這樣

void func1()
{
  int i = 3;
  write("i value: %d", i);
  i++;
}

on key 'y'
{
  func1();
  func1();
  func1();
}

當我在CANoe上點擊按鍵y調用三次func1()函數時,在write窗口打印的結果如下

你會發現當我第一次調用func1()時,i的值為3,第二次調用值為4,第三次調用值為5

按道理來說,每一次調用func1(),都會先聲明一個變量,然后初始化為3,緊接着就打印它的值,然后才會給這個變量加1

那么其實第二次調用func1()時聲明的變量i並不是第一次調用時的變量i,雖然它們在func1()內部名稱是i,但是它只限於在func1()內部使用,當函數func1()執行完畢時,這個函數內的所有的局部變量應該都釋放了才對

既然第二次調用時第一次的變量i都釋放了,而且第二次的變量i和第一次的根本不是同一個,那為什么打印出的值會是第一次調用函數結束時的值?

變量i又不是一個全局變量,如果是一個全局變量,還能說得通

然后我又寫了一個demo來對比

void func1()
{
  int i;  
  i = 3;
  write("i value: %d", i);
  i++;
}

on key 'y'
{
  func1();
  func1();
  func1();
}  

看看打印的結果

 

 

 這才符合我們的預期

為什么這兩種寫法會有不同的結果呢?

int i = 3; 

 

int i;  
i = 3; 

我詢問了vector的技術人員,他們給的答復是

 

 

 

 但是這種說法並不能令我信服,所以我又在python上試了下

def func1():
    i = 1
    print(i)
    i = i + 1

def func2():
    func1()
    func1()

func2()

打印的結果為  

 

 那為什么capl中會出現這個問題,我又繼續追問vector的技術支持

 

 對於函數內定義的變量來說,其他的程序雖然無法直接使用它,但是如果調用這個函數,就會創建這個變量,當函數執行完畢后,這個變量卻不會釋放,如果再次調用這個函數時,這個變量的值就會是上一次調用這個函數時變量的值

解決辦法嘛,就是聲明變量時,另外賦值,比如這樣

int i;
i = 3;

 所以,就這樣吧,以后用的時候還是不要聲明時賦值比較好,比如這樣 

int i = 3; 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM