[問題] 新手學C,求指路

看板C_and_CPP作者 (蜆)時間11年前 (2014/07/13 23:07), 11年前編輯推噓3(3010)
留言13則, 8人參與, 最新討論串1/1
開發平台(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

07/13 23:12, , 1F
type casting 有問題?
07/13 23:12, 1F

07/13 23:14, , 2F
從錯誤訊息來看 應該是型別的問題
07/13 23:14, 2F

07/13 23:15, , 3F
只是傳入參數和原先函數原型所定義的變數型別不同
07/13 23:15, 3F
似乎是有做型態轉換的動作 但跑完warning之後就接著出error了,因為getline沒讀到東西 目前還不太了解該段作用為何,所以沒把code貼上來 其實本篇只是想問看看各位有甚麼推薦的學習資源 ※ 編輯: k03004748549 (1.162.143.43), 07/13/2014 23:22:16

07/14 00:08, , 4F
警告不重要,只要不是致命錯誤就好(咦?
07/14 00:08, 4F

07/14 00:50, , 5F
應該是標準的問題?
07/14 00:50, 5F

07/14 00:52, , 6F
NULL在C是define成0 C++是define成(void *)0 的樣子??
07/14 00:52, 6F

07/14 00:53, , 7F
沒有stdlib.h就幫他include上吧 lib應該都有ifndef應該OK的
07/14 00:53, 7F

07/14 00:54, , 8F
或者是在哪邊有include只是你沒發覺 @@
07/14 00:54, 8F

07/14 14:44, , 9F
C++的NULL是define成nullptr
07/14 14:44, 9F

07/14 15:32, , 10F
樓上是 C++11 才是這樣, C++03 好像就直接是 0 的樣子
07/14 15:32, 10F

07/14 15:32, , 11F
所以印象中為此有時候還得寫 (void *)NULL
07/14 15:32, 11F

07/14 16:47, , 12F
c的NULL沒有標準定義
07/14 16:47, 12F
後來研究了一下,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

07/15 10:14, , 13F
header 定義互蓋, 去看一下你include header 的內容物
07/15 10:14, 13F
文章代碼(AID): #1Jmg2nB2 (C_and_CPP)