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

作者: k03004748549 (蜆)   2014-07-13 23:07:24
開發平台(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的動作呢?
真的是不太了解...)
作者: PUTOUCHANG (自己的廢文自己發)   2014-07-13 23:12:00
type casting 有問題?
作者: firejox (Tangent)   2014-07-13 23:14:00
從錯誤訊息來看 應該是型別的問題
作者: tanted (為何世界會那麼不單純)   2014-07-13 23:15:00
只是傳入參數和原先函數原型所定義的變數型別不同
作者: tjjh89017 (伊達政宗)   2014-07-14 00:08:00
警告不重要,只要不是致命錯誤就好(咦?
作者: q82419 (q82419)   2014-07-14 00:50:00
應該是標準的問題?NULL在C是define成0 C++是define成(void *)0 的樣子??沒有stdlib.h就幫他include上吧 lib應該都有ifndef應該OK的或者是在哪邊有include只是你沒發覺 @@
作者: tjjh89017 (伊達政宗)   2014-07-14 14:44:00
C++的NULL是define成nullptr
作者: LPH66 (-6.2598534e+18f)   2014-07-14 15:32:00
樓上是 C++11 才是這樣, C++03 好像就直接是 0 的樣子所以印象中為此有時候還得寫 (void *)NULL
作者: azureblaze (AzureBlaze)   2014-07-14 16:47:00
c的NULL沒有標準定義
作者: realmeat (真肉)   2014-07-15 10:14:00
header 定義互蓋, 去看一下你include header 的內容物

Links booklink

Contact Us: admin [ a t ] ucptt.com