[問題] fedora8的gcc跟dev-c++的gcc
開發平台(Platform): (Ex: VC++, Gcc, Linux, ...)
dev-C++ 版本4.9.9.2
linux fedora8 gcc
額外使用到的庫(Library Used) (Ex: OpenGL, ...)
問題(Question):
dev-C++ ==>副程式的回傳值給主程式的c= 16384
linux fedora8 gcc ==>副程式的回傳值給主程式的c= 24
兩邊不同...
餵入的資料(Input):
副程式的count
預期的正確結果(Expected Output):
主程式的c= 24
錯誤結果(Wrong Output):
其中一個IDE無法回傳....
程式碼(Code): (請善用置底文標色功能)
#include <stdio.h>
typedef struct node{
struct node *left;
int data;
struct node *right;
}NODE;
NODE H={NULL,80,NULL};
NODE I={NULL,90,NULL};
NODE D={&H,40,&I};
NODE F={NULL,60,NULL};
NODE G={NULL,70,NULL};
NODE B={&D,20,NULL};
NODE C={&F,30,&G};
NODE A={&B,10,&C};
int infix (NODE *h){
static int nNode=0,count=0;
if(h==NULL) return (count);
else {
count++;
infix(h->left);
printf("step %d==>node%d: %3d\n",++count,++nNode,h->data);
count++;
infix(h->right);
}
}
int main (void){
NODE *head=&A;
int c=0;
c=infix(head);
puts("\n");
printf("number of node=%d\n",c);
return 0;
}
補充說明(Supplement):
我目前在用linux寫c的程式
但是因為功力太差
所以只好拿dev-C++來debug
本來以為兩邊都是gcc的compiler所以應該編譯跟執行都一樣
結果這個程式居然就失敗了....
想請問大家為什麼會這樣?
(會是gcc的版本不同的問題嗎?
dev-C++的gcc版本要怎麼查?
fedora8的gcc版本是4.1.2)
如果我想要debug fedora8下寫的c語言程式碼
有沒有推薦什麼工具
(可以安裝在xp上的IDE就好了 比較方便)
謝謝 希望沒有op
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.9.209
※ 編輯: wimax802 來自: 114.32.9.209 (12/29 16:20)
→
12/29 16:27, , 1F
12/29 16:27, 1F
→
12/29 16:28, , 2F
12/29 16:28, 2F
→
12/29 16:28, , 3F
12/29 16:28, 3F
→
12/29 16:29, , 4F
12/29 16:29, 4F
→
12/29 16:38, , 5F
12/29 16:38, 5F
→
12/29 16:47, , 6F
12/29 16:47, 6F
推
12/29 16:51, , 7F
12/29 16:51, 7F
→
12/29 17:07, , 8F
12/29 17:07, 8F
→
12/29 17:07, , 9F
12/29 17:07, 9F
→
12/29 17:15, , 10F
12/29 17:15, 10F
→
12/29 17:17, , 11F
12/29 17:17, 11F
→
12/29 17:18, , 12F
12/29 17:18, 12F
→
12/29 17:19, , 13F
12/29 17:19, 13F
→
12/29 17:23, , 14F
12/29 17:23, 14F
→
12/29 17:29, , 15F
12/29 17:29, 15F
用修改的方式問好了~
很好奇耶 我想回傳的值的確是24 f8的gcc可以正確回傳
但是dev-c++的gcc卻不行 這樣真的是gcc版本的差別造成?
警告的地方
是不是因為我用遞迴
所以不能在停止條件的時候一直做回傳的動作?
回傳變數只能回傳一次
是這樣子嗎?
那我想要改這支程式的話
是不是只能用call by address傳主程式的c變數的位置到副程式中
直接控制主程式的c變數的內容值?
這樣做ok嗎?
還有沒有其他方法?
謝謝
※ 編輯: wimax802 來自: 114.32.9.209 (12/29 17:44)
推
12/29 17:46, , 16F
12/29 17:46, 16F
→
12/29 17:47, , 17F
12/29 17:47, 17F
→
12/29 17:48, , 18F
12/29 17:48, 18F
→
12/29 17:48, , 19F
12/29 17:48, 19F
→
12/29 17:48, , 20F
12/29 17:48, 20F
→
12/29 17:48, , 21F
12/29 17:48, 21F
→
12/29 17:49, , 22F
12/29 17:49, 22F
→
12/29 17:53, , 23F
12/29 17:53, 23F
→
12/29 17:56, , 24F
12/29 17:56, 24F
→
12/29 17:57, , 25F
12/29 17:57, 25F
→
12/29 17:58, , 26F
12/29 17:58, 26F
→
12/29 17:58, , 27F
12/29 17:58, 27F
→
12/29 18:00, , 28F
12/29 18:00, 28F
→
12/29 18:01, , 29F
12/29 18:01, 29F
→
12/29 18:02, , 30F
12/29 18:02, 30F
→
12/29 18:03, , 31F
12/29 18:03, 31F
→
12/29 18:03, , 32F
12/29 18:03, 32F
→
12/29 18:06, , 33F
12/29 18:06, 33F
→
12/29 18:08, , 34F
12/29 18:08, 34F
→
12/29 18:09, , 35F
12/29 18:09, 35F
→
12/29 18:11, , 36F
12/29 18:11, 36F
→
12/29 18:15, , 37F
12/29 18:15, 37F
→
12/29 18:42, , 38F
12/29 18:42, 38F
→
12/29 20:45, , 39F
12/29 20:45, 39F
→
12/29 20:46, , 40F
12/29 20:46, 40F
→
12/29 20:48, , 41F
12/29 20:48, 41F
→
12/29 20:51, , 42F
12/29 20:51, 42F
→
12/29 20:52, , 43F
12/29 20:52, 43F
→
12/29 20:53, , 44F
12/29 20:53, 44F
→
12/29 20:53, , 45F
12/29 20:53, 45F
→
12/29 20:53, , 46F
12/29 20:53, 46F
→
12/29 20:55, , 47F
12/29 20:55, 47F
→
12/29 20:56, , 48F
12/29 20:56, 48F
→
12/29 20:56, , 49F
12/29 20:56, 49F
→
12/29 20:57, , 50F
12/29 20:57, 50F
→
12/29 20:57, , 51F
12/29 20:57, 51F
→
12/29 20:57, , 52F
12/29 20:57, 52F
→
12/29 20:58, , 53F
12/29 20:58, 53F
回x大 我用gcc編譯得到的警告訊息是:
16 C:\Users\user\Desktop\test.c
[Warning] control reaches end of non-void function
只有non-void function跟x大的一樣 其他....我看不懂 囧rz
→
12/29 20:58, , 54F
12/29 20:58, 54F
→
12/29 20:59, , 55F
12/29 20:59, 55F
→
12/29 20:59, , 56F
12/29 20:59, 56F
→
12/29 21:00, , 57F
12/29 21:00, 57F
→
12/29 21:01, , 58F
12/29 21:01, 58F
→
12/29 21:01, , 59F
12/29 21:01, 59F
→
12/29 21:02, , 60F
12/29 21:02, 60F
※ 編輯: wimax802 來自: 203.73.235.244 (12/29 21:03)
→
12/29 21:06, , 61F
12/29 21:06, 61F
※ 編輯: wimax802 來自: 203.73.235.244 (12/29 21:13)
→
12/29 21:23, , 62F
12/29 21:23, 62F
又想到一個問題
我先解釋一下我這裡的狀況
首先因為我在某補習班學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)
→
12/29 21:56, , 63F
12/29 21:56, 63F
→
12/29 22:06, , 64F
12/29 22:06, 64F
→
12/29 22:09, , 65F
12/29 22:09, 65F
→
12/29 22:16, , 66F
12/29 22:16, 66F
→
12/29 22:21, , 67F
12/29 22:21, 67F
※ 編輯: wimax802 來自: 203.73.235.244 (12/29 22:22)
→
12/29 23:33, , 68F
12/29 23:33, 68F
→
12/30 00:08, , 69F
12/30 00:08, 69F
→
12/30 00:19, , 70F
12/30 00:19, 70F
→
12/30 00:20, , 71F
12/30 00:20, 71F
→
12/30 03:30, , 72F
12/30 03:30, 72F
→
12/30 11:19, , 73F
12/30 11:19, 73F
推
12/30 14:11, , 74F
12/30 14:11, 74F
→
12/30 23:34, , 75F
12/30 23:34, 75F
→
12/30 23:35, , 76F
12/30 23:35, 76F
→
12/31 08:49, , 77F
12/31 08:49, 77F
推
12/31 09:29, , 78F
12/31 09:29, 78F
→
12/31 09:31, , 79F
12/31 09:31, 79F
→
12/31 10:30, , 80F
12/31 10:30, 80F
→
12/31 10:30, , 81F
12/31 10:30, 81F