作者minazukimaya (水無月真夜)
看板C_and_CPP
標題Re: [問題] 新手語法if else
時間Fri Oct 2 01:54:38 2009
※ 引述《QQ29 (我愛阿蓉)》之銘言:
: 今天trace code
: if
: {......}
: else<=====中斷點設這
: {
: if()
: { ....}
: }<==================跳到這
: 中斷以後 按下f10 發現他就跳到上面那鍵頭了
: 想一想
: 難道
: else{ if() {}}
: 其實跟 else if()是相等的??????
: 只是多了一個{}scope不同???
@@
不相等啊
if( ) {
else {
if( ) {
}
//some statements here
}
和
if( ) {
else if( ) {
}
// where can you put 'some statements' ?
上述的例子說明在High level language的語意上這兩者是不相等的
回到你前面的問題
為什麼中斷點這樣跳
和
1. Compiler的最佳化
2. debug tool在ASM code和C code間的關連對應方法
3. 該平臺的指令集
三者都有關係..
如果你想知道為什麼那樣跳
可以把Assembly視窗打開看看compiler究竟把哪些assembly關連到哪一行code..
也許在某些平臺某些Compiler的某些狀況下
if() {}
else { if() {} }
和
if() {}
else if { }
編出來的code是完全相等的
(其實應該絕大多數的Compier和平臺都會是這樣)
但是那和高階語言本身的「語意」是兩回事
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.170.83.47
※ 編輯: minazukimaya 來自: 118.170.83.47 (10/02 01:55)
推 snowlike:else if( ) {/*some*/} else {/*some*/} 10/02 02:25
→ minazukimaya:樓上的..那些some statement是if判斷過了之後也會執 10/02 15:03
→ minazukimaya:行的喔@@ 你寫成這樣 後面那段是if判斷過了就不會執 10/02 15:03
→ minazukimaya:行的 10/02 15:03
推 snowlike:else{if{}_}=else{if{_}else{_}}=else if{_}else{_} @@? 10/02 16:15
→ minazukimaya:第一個等號錯了 10/03 23:08