作者查詢 / yvb
作者 yvb 在 PTT [ C_and_CPP ] 看板的留言(推文), 共847則
限定看板:C_and_CPP
看板排序:
2F推:簡單說, 加一列 static int Q();跟類似宣告,去編看看就知道了.12/11 22:36
3F→:static int Q() 跟 static int Q(void) ==> error12/11 22:38
4F→:static int Q(int) ==> pass12/11 22:38
8F推:我是放在 class X 裏頭沒錯呀. 如果將 Q(int) 換為 Q(void)12/12 00:23
9F→:編譯時會出現12/12 00:24
10F→:11:13: error: 'static int X::Q()' cannot be overloaded12/12 00:24
11F→:10:11: error: with 'static int X::Q()'12/12 00:24
12F→:我是使用 g++ 4.6.3 .12/12 00:25
13F→:再試 g++ 4.2.4 及 g++ 3.3.4 也相同情況,12/12 00:29
14F→:3.3.4 的訊息稍有不同:12/12 00:30
15F→:error: `static int X::Q()' and `static int X::Q()' cannot12/12 00:30
16F→: overloaded12/12 00:30
17F→:9: warning: all member functions in class `X' are private12/12 00:31
18F→:但基本上 error 的意思一樣 (error: ... ==> 11: error: ...)12/12 00:32
19F推:如果 Q(int) 下移兩列, 就出問題了, 編譯時會出現12/12 00:36
20F→:12:17: error: 'int Q(int)' redeclared as different kind of12/12 00:37
21F→: symbol12/12 00:37
22F→:6:13: error: previous declaration of 'typedef int Q()'12/12 00:37
23F→:不放 class X 裏頭根本就有問題呀.12/12 00:38
24F→:剛沒注意. Class X 中, static int Q(); 我是寫 static P(Q);12/12 00:40
25F→:然後空兩格的部分我是直接按一個 <TAB>.12/12 00:44
26F→:也就是 line 8-12:12/12 00:45
27F→:class X12/12 00:45
28F→:{12/12 00:46
29F→: static P(Q);12/12 00:46
30F→: static int Q(void);12/12 00:46
31F→:};12/12 00:46
32F→:其中的 Q(void) 換為 Q(int) 時, 編輯才會過.12/12 00:47
33F→:另外 typedef int Q(); 沒寫也沒差.12/12 00:49
34F推:去找了一下那段 code, 它有下一句註解:12/12 01:10
35F→: // the parentheses around Q are redundant12/12 01:11
36F→:意思 static P(Q); 就是 static P Q; 啊.12/12 01:13
37F推:現在才發現, 原來後面有人回文了 @@12/12 01:18
11F推:Introduction to Algorithms ? http://ppt.cc/d@ak ??12/11 22:10
8F推:main() 中的 count 請看置底十三誡之第1誡.12/07 00:58
9F→:main() 應該是想印出 InvCount() 的回傳值?12/07 01:02
10F→:因 InvCount() 和 invMerge() 的參數 count 是 call by value.12/07 01:03
11F推:話說C99支援variable-length-array(VLA),C++14也可能跟進.12/07 01:58
12F→:使用 GNU g++ 時, int A[a] 可以用就是; Dev C++ 就不清楚了.12/07 02:04
13F推:新版 上面的函數宣告 和 下面的函數定義, 最後一個參數不一致.12/07 10:05
14F→:其實你舊版可能只要改 main() 中呼叫 InvCount() 那一列:12/07 10:08
15F→: count=InvCount(A,0,a-1,0);12/07 10:09
16F→:就解決第1誡的問題 (但 count 是在幹嘛的? :P).12/07 10:14
17F→:如果是新版的方式, 那下面兩函數的回傳值又是幹嘛的?12/07 10:17
18F→:新版 函數的第一個參數, 宣告/定義 也和 呼叫 不一致.12/07 10:24
20F推:你第4版還是有問題啊... 至少 4 4 3 1 2 就是錯的吧.12/07 15:56
21F→:還有,invMerge() 的 int B[r-p] => int B[r-p+1];12/07 15:58
22F→:以及最後 copy B 回 A 漏掉最後一個.12/07 15:59
23F→:另外, count 看來根本不需當參數傳入,只要在 invMerge()12/07 16:02
24F→:使用 int count=0 做為 local variable 即可.12/07 16:02
25F→:還有,如果 a 的值可能很大,還是使用 new 及 delete 去做吧,12/07 16:06
26F→:畢竟 local variable 放 stack 中, 大小還蠻有限制的.12/07 16:15
27F推:第4版無法正確計算出結果的問題, 都出在invMerge().12/08 22:31
28F→:除了前面所提 B 宣告的大小, return 前 copy B 回 A 的長度外,12/08 22:32
29F→:最主要的是 count += r - m; 這列放錯地方. 自行驗證一下吧.12/08 22:39
4F推:借了看不完, 買了不看完 XD12/05 17:18
13F推:這就不知道了. 直接來源看來是這篇 #1F5OOCoO 吧.12/11 22:04
5F推:樓上可知 fdopen() 和 fileno() ?12/06 22:17
4F推:int n; cin >> n; if (cin.fail()) ... ?11/29 12:56
6F推:補充一下, 如果是使用 scanf(), atoi(), strtol() 等,11/30 20:02
7F→:有可能(不保證,需測試)在超出範圍時,會將errno設為ERANGE.11/30 20:04
37F推:love大 終於來說話了? XD11/30 18:01
38F→:基本上只要定好你自己的通訊協定, 實作試了沒問題應該就OK.11/30 18:02
39F→:不管是用binary格式或text格式應該都不是問題.11/30 18:17
40F→:但就像函式有參數跟回傳值, 送過去的命令就如同參數,11/30 18:19
41F→:收到命令做完或處理錯誤,拒絕處理等,若有回傳訊息可能更好.11/30 18:20
42F→:也有一些文字格式的通訊協定也許可以參考一下,如http,smtp等,11/30 18:21
43F→:文字型通訊協定好處是容易用telnet之類工具就可測試除錯,11/30 18:23
44F→:另外就是通訊協定是否可能未來需要擴充,如更多控制參數等.11/30 18:24
45F→:因為看你的圖似乎有個未來要加入的部分,關係似乎尚不明確.11/30 18:26
4F推:除非真的是要產生 binary file, 不然文字檔搭配使用 endl,11/30 20:37
5F→:不是比自己處理換行符號來得好嗎?11/30 20:38
6F→:或是真的有什麼特殊需求?11/30 20:38
10F推:<< endl 相當於 << "\n" << flush , 也就是換列加強制寫出.12/14 13:12
11F→:文字模式時, "\n" 在 win 會產生 "\x0d\x0a", linux/unix 則12/14 13:13
12F→:產生 "\x0a", Mac OS 9 以前則是 "\x0d"; Mac OS X 同 UNIX.12/14 13:16
13F→:也就是說, 平台在文字模式時會自行轉換成正確的換列輸出.12/14 13:18
1F推:把呼叫 allocation() 前後, temp 的值(指向的addr)印出來看看.11/25 13:46
2F→:喔, 還有 allocation() 裏面 temp 的值也印出來看.11/25 13:48
3F推:backtrace() ?11/23 14:52
5F推:補充一下, backtrace() 只是 addresses,11/23 17:35
7F→:搭配編譯 -rdynamic 和 backtrace_symbols() 可印 func+offset11/23 17:37
10F→:而搭配編譯 -g 及 addr2line 程式, 可印出 source 行號等.11/23 17:39
14F→:release 出去的檔案 strip 過就可以了, 自己留 -g 的.11/23 17:40
15F→:然後就不要用 -rdynamic backtrace_symbols() 的方式.11/23 17:41
19F→:用 -g 的, 別人就可看到 symbols...11/23 17:45
20F→:反正印出 addresses 就夠了, log 拿回來再用 addr2line,11/23 17:46
22F→:搭配自己 -g 未 strip 過的, 就可以看到行號等資訊了.11/23 17:46
24F→:試試看 strings -a exe-file, 可能還是看得到一點東西,11/23 17:49
26F→:但又如何? 應該還好吧...11/23 17:50
28F→:如果是 exe, 自己的 func, var 等應該在 strip 後就不見了,11/23 17:55
29F→:但叫用的 printf 等 lib 名稱總是會在的.11/23 17:55
30F→:如果是 libxx.so, 那 export 出去的還是要看得到,不然就無法用11/23 17:56
31F→:所以自己留 -g, 不要用-rdynamic, 而 rel 的要 strip 就對了.11/23 17:57
33F推:所以要有兩份, 一份自用有symbols(-g),一份給人用是strip過的.11/23 18:06
35F推:當然可以, 因為 backtrace() 只是讀出 addresses 而已.11/23 19:59
36F→:要看 source 的 file, func, line number 等,11/23 19:59
37F→:則是用 addr2line 給 address 參數, 搭配未 strip過的執行檔,11/23 20:01
38F→:(也就是你自留的執行檔, 不是給別人那份), 才可以印出來.11/23 20:03
44F推:可加-g(留自己debug用). strip及後的描述都對(重點就是strip).11/23 22:15
45F→:當然, 如果你開發工具及函式庫等都未變動的情況下,重編譯加-g11/23 22:19
46F→:應該還是能編出一樣的東西; 但如果有所更動, 可能重編後,11/23 22:20
47F→:位址和行數對應可能就改了,所以建議留一份code和-g的執行檔.11/23 22:22
51F推:-g 是執行檔會包含 debug info, 讓你可以 debug 工具做些事.11/24 23:30
52F→:但 backtrace() 一定只是抓出 addresses,11/24 23:32
53F→:根據 addresses 和 debug info, debug 工具才能得知 src+line.11/24 23:33
57F推:還是要 strip 過. 請自行用 strings 和 nm 確認.11/26 00:12