作者k03004748549 (蜆)
看板C_and_CPP
標題[問題] 新手學C,求指路
時間Sun Jul 13 23:07:24 2014
開發平台(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