作者查詢 / yvb

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