→ akasan:孩子你沒在所有路徑都 return 12/29 16:27
→ akasan:IDE => code::blocks or eclipse 12/29 16:28
→ loveme00835:這會有warning才對阿 XDD 12/29 16:28
→ akasan:事實上無視 warning 的人還不少呢 12/29 16:29
→ loveme00835:@_@ 12/29 16:47
推 legnaleurc:Dev-C++ 通常是 3 12/29 16:51
→ wimax802:沒有耶我在fedora8執行gcc沒有警告@@ 12/29 17:07
→ loveme00835:命令列打上 C:\Dev-Cpp\bin\gcc --version 版本就出來 12/29 17:07
→ wimax802:有了 3.4.2 12/29 17:15
→ loveme00835:養成良好習慣 [工具] > [編譯器選項] > 勾選 [當呼叫 12/29 17:17
→ loveme00835:編譯器時, 加入下列的命令] 打上 -Wall 或加其他選項 12/29 17:18
→ loveme00835:有警告不看很糟内... 12/29 17:19
→ wimax802:有了 這樣真的有警告...... 之前都看不到...^^" 12/29 17:23
→ wimax802:沒看過這種警告...可以請教一下嗎~"~ 12/29 17:29
用修改的方式問好了~
很好奇耶 我想回傳的值的確是24 f8的gcc可以正確回傳
但是dev-c++的gcc卻不行 這樣真的是gcc版本的差別造成?
警告的地方
是不是因為我用遞迴
所以不能在停止條件的時候一直做回傳的動作?
回傳變數只能回傳一次
是這樣子嗎?
那我想要改這支程式的話
是不是只能用call by address傳主程式的c變數的位置到副程式中
直接控制主程式的c變數的內容值?
這樣做ok嗎?
還有沒有其他方法?
謝謝
※ 編輯: wimax802 來自: 114.32.9.209 (12/29 17:44)
推 legnaleurc:跟遞迴無關, 你的 else 區塊跑完之後, 函式的回傳值 12/29 17:46
→ legnaleurc:是什麼? BTW, 你可以把 count 當成參數傳遞, 就不需要 12/29 17:47
→ uranusjr:我記得之前有人發過類似的, 那時後有討論過 return 不正 12/29 17:48
→ legnaleurc:local static variable ... 然後沒有 call by address 12/29 17:48
→ legnaleurc:的說法 ... 12/29 17:48
→ uranusjr:確時 compiler 的行為...不過結論是與其鑽這個不如程式好 12/29 17:48
→ uranusjr:好寫, 不要在未定義行為上煩惱 12/29 17:49
→ wimax802:回l大 應該是call by reference... 12/29 17:53
→ wimax802:回u大 因為我怕因為gcc版本不同造成debug時有更多困擾... 12/29 17:56
→ wimax802:所以才很在意版本的差別 12/29 17:57
→ wimax802:那gcc 版本3跟4 編譯跟執行有差異很大嗎? 有的話可能 12/29 17:58
→ wimax802:我不能互用了@@ 要在找別的工具看看.... 12/29 17:58
→ x000032001:code砍掉重練好了 比較不會有甚麼版本差異 12/29 18:00
→ uranusjr:程式好好寫的話基本上不會有太大差異, 這裡有差的原因是 12/29 18:01
→ uranusjr:你, 不是編譯器版本 (不過還是換個 IDE 吧, 新版沒壞處) 12/29 18:02
→ james732:重點是:請不要寫未定義的行為,會發生什麼事沒人知道 12/29 18:03
→ wimax802:我知道我的程式設計還很差 所以才要用debug工具啊 12/29 18:03
→ wimax802:剛剛在else裡面加上return之後的確警告就會沒了^^ 12/29 18:06
→ wimax802:謝謝l大的提醒~ 12/29 18:08
→ wimax802:請問j大 未定義的行為指的是什麼? 12/29 18:09
→ james732:你覺得else裡面沒有加return的話 他會發生什麼事? 12/29 18:11
→ legnaleurc:C 只有 pass by value 啦 ... 12/29 18:42
→ wimax802:啊 又不對了XDDD 好吧 以後找時間重新念起.... 12/29 20:45
→ wimax802:謝謝大家幫忙 感覺收獲很大 呵呵 12/29 20:46
→ wimax802:這篇程式我會在研究看看 改天還是沒解決再來請教^^" 12/29 20:48
→ wimax802:不知道還有沒有常見的warning 而又都是什麼意思呢? 12/29 20:51
→ wimax802:以前大一學c語言也是沒在研究warning 結果出來了就不理它 12/29 20:52
→ wimax802:結果出錯就換別的寫法 在寫不出來就放棄..... 囧rz 12/29 20:53
→ x000032001:warning都是英文 基本上肯看都不難了解吧= =??? 12/29 20:53
→ x000032001:看不懂的話上google或msdn 找不到才去問 12/29 20:53
→ wimax802:可是知道字面意思卻不見得知道問題在哪耶.... 12/29 20:55
→ x000032001:我相信google後無法解決的warning<20% 12/29 20:56
→ wimax802:這篇程式也是靠版有幫忙才知道在else裡面沒有回傳會出錯 12/29 20:56
→ wimax802:喔 @@ 我以前有google過一些error的問題是有解.. 12/29 20:57
→ wimax802:不過這個警告 兩小時前去找好像沒有找到想要找的解答XDD 12/29 20:57
→ x000032001:warning: no return statement in function returning 12/29 20:57
→ x000032001:non-void 這一看就知道是"副程式中沒有回傳敘述" 12/29 20:58
回x大 我用gcc編譯得到的警告訊息是:
16 C:\Users\user\Desktop\test.c
[Warning] control reaches end of non-void function
只有non-void function跟x大的一樣 其他....我看不懂 囧rz
→ loveme00835:可能是當初基礎沒打好, 才會不懂編譯器講的名詞 12/29 20:58
→ wimax802:msdn...喔喔 等一下來找找 12/29 20:59
→ x000032001:warning是GCC編出來的結果 老大我初級英檢都過不了阿!! 12/29 20:59
→ wimax802:我學c語言的時候老師只說語法 很多東西沒有強調過 12/29 21:00
→ wimax802:所以很多問題都沒有重視 當然有部分是自己懶惰..... 12/29 21:01
→ x000032001:嗯..總之還是希望真的餵狗無果再問~"~ 12/29 21:01
→ wimax802:可是副程式 我有在if的條件式後面給回傳所以我認為沒問題 12/29 21:02
※ 編輯: wimax802 來自: 203.73.235.244 (12/29 21:03)
→ loveme00835:C 語言程設都翹課說 (  ̄ c ̄)y▂ξ 12/29 21:06
※ 編輯: wimax802 來自: 203.73.235.244 (12/29 21:13)
又想到一個問題
我先解釋一下我這裡的狀況
首先因為我在某補習班學linux的c語言所以我要用fedora8寫程式
(未來要寫的kernal程式跟fedora8最接近)
而fedora8如果不用它內建的IDE編譯跟除錯的話
我不知道該怎麼用除錯工具(我們是在console下gcc編譯.c檔跟執行)
所以我才想要用dev-C++來幫我做除錯
剛好我安裝的dec-C++是4.9.9.2版
也就是gcc是第三版
fedora8的gcc是第四版
我的想法是說
新版的gcc應該是容錯的空間比較大
gcc 3版比4版嚴格
所以我用dev-C++來編譯跟執行ok的話
應該在fedora8也不會有問題
我這樣的想法對嘛
還是這兩版中間差異很大.....
這其實才是我一開始想問的問題~"~
當然前提是如果我知道是自己的程式本身有瑕疵
我會想辦法改正....
以前我都只是驗證結果正確就不管了
對細節不太注意....
現在在回來看很多地方都變成報應了 囧rz
※ 編輯: wimax802 來自: 203.73.235.244 (12/29 22:04)
→ x000032001:改用code::blocks吧 devC++可以丟了 12/29 21:56
→ wimax802:ok 馬上來用看看XDD 12/29 22:06
→ loveme00835:Dev C++ 沒啥不好阿, 換個核心一樣能用 12/29 22:09
→ uranusjr:沒有新版 gcc 容錯比較高這種事 12/29 22:16
→ wimax802:所以還是只能自己想辦法把程式寫對 不能光靠工具幫忙是吧 12/29 22:21
※ 編輯: wimax802 來自: 203.73.235.244 (12/29 22:22)
→ wimax802:code::blocks的除錯工具我不會用....~"~ 12/29 23:33
→ wimax802:謝謝j大的說明 不過我之前的問題是C::B不能停止debug 囧 12/30 00:19
→ wimax802:我按紅色的stop卻停不下來~"~ 在慢慢研究好了.... 12/30 00:20
→ fevg:以後可以加上 -Wall -Werror compiler option..... 12/30 03:30
→ james732:話說,fedora 8也好多年了 12/30 11:19
推 ledia:-pedantic !! 12/30 14:11
→ wimax802:用-pedantic會連//都警告耶 XDD 12/30 23:34
→ loveme00835:-pedantic 加上 -std=c99 12/30 23:35
→ wimax802:為什麼要用c99呢 12/31 08:49
推 nowar100:因為 c89 不能用 // 12/31 09:29
→ ken1325:visual studio最強 12/31 09:31
→ wimax802:是喔 我覺得code::blocks已經很神了 除非語法太誇張 12/31 10:30
→ wimax802:亂寫都會過 還能執行...@@ 邏輯錯誤除外.... 12/31 10:30