看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) 主要為 GCC (on linux) 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 各位先進大家好, 最近老闆丟給我一份訊號處理相關的code(各種濾波、解迴旋等), 因為所附的bin原本是給solaris sparc系列跑的, 需要重新compile到比較普遍的PC環境下面, 只是本人程度不佳, 大學只學過基礎C++,懂資料型態、陣列、簡單的指標與迴圈, 物件導向跟IO處理因為課程時間不足,反而也沒接觸很多, 沒什麼獨立作業能力,有時候連要include哪些lib都不清楚。 加上這份code似乎是在1991~2001年間撰寫的, 作者明言是以K&R C編寫, 有時遇到一些問題我真的搞不懂是原寫法有問題, 還是規範有差異,gcc要再額外加flag或code要做修改, (像現在最常遇到的三個警告: /usr/include/stdio.h:678:20: note: expected ‘char ** __restrict__’ but argument is of type ‘char *’ extern _IO_ssize_t getline (char **__restrict __lineptr, /usr/include/stdio.h:678:20: note: expected ‘size_t * __restrict__’ but argument is of type ‘struct FILE *’ extern _IO_ssize_t getline (char **__restrict __lineptr, warning: comparison between pointer and integer [enabled by default] if (p == NULL) ^ 實在是不得要領...不確定該怎麼修改才會對,而且為什麼作者沒碰到這種問題...) 我想我可能需要從基礎面做了解, 因此想問看看是否有合適/合時的書,或推薦的線上課程及習題可以參考, (圖書館的K&R被借走了...) 還望各位不吝指教,謝謝。 (還有一個小問題想問, 為什麼作者有用到malloc/free, .c/.h/.sh卻完全看不到有include stdlib.h的動作呢? 真的是不太了解...) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.162.143.43 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1405264049.A.2C2.html
PUTOUCHANG:type casting 有問題? 07/13 23:12
firejox:從錯誤訊息來看 應該是型別的問題 07/13 23:14
tanted:只是傳入參數和原先函數原型所定義的變數型別不同 07/13 23:15
似乎是有做型態轉換的動作 但跑完warning之後就接著出error了,因為getline沒讀到東西 目前還不太了解該段作用為何,所以沒把code貼上來 其實本篇只是想問看看各位有甚麼推薦的學習資源 ※ 編輯: k03004748549 (1.162.143.43), 07/13/2014 23:22:16
tjjh89017:警告不重要,只要不是致命錯誤就好(咦? 07/14 00:08
q82419:應該是標準的問題? 07/14 00:50
q82419:NULL在C是define成0 C++是define成(void *)0 的樣子?? 07/14 00:52
q82419:沒有stdlib.h就幫他include上吧 lib應該都有ifndef應該OK的 07/14 00:53
q82419:或者是在哪邊有include只是你沒發覺 @@ 07/14 00:54
tjjh89017:C++的NULL是define成nullptr 07/14 14:44
LPH66:樓上是 C++11 才是這樣, C++03 好像就直接是 0 的樣子 07/14 15:32
LPH66:所以印象中為此有時候還得寫 (void *)NULL 07/14 15:32
azureblaze:c的NULL沒有標準定義 07/14 16:47
後來研究了一下,getline似乎是作者自己寫的function 大概是沒想到後來會有相同名稱的通用函數出現 所以我修改了函數名稱,至於==NULL則依照對應變數型態不同改成==0或=='/0' compile就過了 warning變成只出現在型態轉換的時候(double轉int跟int*轉char*) ... 結果跑的時候出runtime error *** Error in `./vmodel': realloc(): invalid next size: 0x0000000000863320 *** Aborted (core dumped) 我想還是該寫信問問作者 ※ 編輯: k03004748549 (140.115.21.196), 07/14/2014 17:37:10
realmeat:header 定義互蓋, 去看一下你include header 的內容物 07/15 10:14