在gdb一段**的時候,發現在執行n的時候,並沒有按照預期進行執行,而是執行到另一行**中。而該行**是在整體的**邏輯中由於條件不滿足是不可能進入的。
**框架如下:
if(條件1)
處理4if(條件5)
else
std::cout
<<"hh"
<}
else
}else
else}}
else
else
}else
}
當執行到條件5中的else中時,由於缺失乙個return語句,此時如果繼續n執行下一步操作的話,會先執行最外層條件1的位置,再到outerrormsgfmt(「一段資訊」)下面的return false。這裡如果在**最後補充任何的語句,比如std::cout列印任何字元,也不會出現上述奇怪跳轉。
這是由於該函式本該有乙個返回值,但是程式執行的時候,發現得不到返回值。但是為何會去執行到該行的return false呢?嘗試注釋掉該行的return false,而在下面又增加乙個return 返回值,發現原有的執行,變成新的return值的位置?猜測,是否是在尋找**塊中最末尾的return位置作為替代呢??還望高人指點?
這就匯出乙個問題,在乙個需要返回值的時候,如果函式實現過程中沒有返回值呢?會如何?
下面的測試**是可以在g++裡面正常編譯的,系統會給乙個返回值。
int testfun(int a)
void main()
按照
中的說法是會在編譯的時候加上-wreturn-type引數或者-wall的時候,給出warning資訊。
if語句裡面的條件判斷不是在編譯時就可以確定的。程式執行時才知道,是動態聯編。
當然,正常情況下,是可以在最後一行return乙個值的,在條件中也給予對應的返回值,就不會出現這些異常。
mysql遇到奇怪的問題
昨天將ubuntu更新,更新完mysql卻不能用了,花了很長時間在網上找解決辦法都未果。今天ubuntu開機提示系統有問題,說可能原因是我更改了 etc mysql my.cnf 我昨天的確改過這個檔案,我只是想讓區域網主機連線到我主機裡的資料庫,於是bind我的主機ip,之後進行了系統更新,系統更...
ros vrep bridge遇到的奇怪問題
vrep版本 v rep pro edu v3 3 1 64 linux ros indigo 要使得兩者能夠互相通訊,需要裝ros vrep bridge。在裝的時候遇到了兩個奇怪的問題。教程 catkin make 錯誤一 could not find a package configurati...
windows sdk程式設計遇到奇怪的問題
用windows sdk編寫應用程式遇到乙個奇怪的問題 當 如下時,case idc button getpid return true case idc button browser memset ofn,0,sizeof openfilename ofn.lstructsize sizeof o...