哪位给推荐一下比较好的C语言教材---------- ...

来源:百度文库 编辑:超级军网 时间:2024/04/28 23:27:20
  我的编程知识非常少,几乎为零,现在想学点儿C语言,请各位推荐比较好的教材。我的编程知识非常少,几乎为零,现在想学点儿C语言,请各位推荐比较好的教材。
谭浩强 C语言


C的书很多,最好是看国外原版的,比如Ivor Horton的那本C语言入门经典或者克尼汉的那本C程序设计语言,看原版的,只要四级水平就可以了,国内翻译的很多都有错误,另外反正谭浩强的书完全不推荐,很多错误,比如void main()这个最经典的错误

C的书很多,最好是看国外原版的,比如Ivor Horton的那本C语言入门经典或者克尼汉的那本C程序设计语言,看原版的,只要四级水平就可以了,国内翻译的很多都有错误,另外反正谭浩强的书完全不推荐,很多错误,比如void main()这个最经典的错误
LPC2103 发表于 2010-11-10 18:39

只记得java是public static void main。C是int main吗?
谭浩强是本适合大学生靠计算机等级用……:D

只记得java是public static void main。C是int main吗?
jiandingzhe 发表于 2010-11-10 18:43



    只能是int main(),在GNU的规范中main函数是必须要有返回值的,所以07年以前谭浩强的书出现了一个很尴尬的局面,就是所有的代码都无法在LINUX的VI中通过GNU编译;P除非把void去掉然后加个return值
只记得java是public static void main。C是int main吗?
jiandingzhe 发表于 2010-11-10 18:43



    只能是int main(),在GNU的规范中main函数是必须要有返回值的,所以07年以前谭浩强的书出现了一个很尴尬的局面,就是所有的代码都无法在LINUX的VI中通过GNU编译;P除非把void去掉然后加个return值
LPC2103 发表于 2010-11-10 18:46

main返回值的类型,代表了什么?

main返回值的类型,代表了什么?
jiandingzhe 发表于 2010-11-10 18:49


根据ANSI-C(C89/C99)完整的main只有这主要两种形式,更复杂的形式依然是以第二个为基础的:
int main(void)
int main(int argc, char *argv[])
int argc是运行命令参数个数,char *argv[]是运行命令参数
作为函数是一定要有返回值的,c++98中main的返回值还一定是int类型的,不能有void类型的返回值,这样才能传递给OS,return 0就是表示程序正常退出的意思
~~~~~~~~~~~
不好意思,关于argc刚刚打错了
main返回值的类型,代表了什么?
jiandingzhe 发表于 2010-11-10 18:49


根据ANSI-C(C89/C99)完整的main只有这主要两种形式,更复杂的形式依然是以第二个为基础的:
int main(void)
int main(int argc, char *argv[])
int argc是运行命令参数个数,char *argv[]是运行命令参数
作为函数是一定要有返回值的,c++98中main的返回值还一定是int类型的,不能有void类型的返回值,这样才能传递给OS,return 0就是表示程序正常退出的意思
~~~~~~~~~~~
不好意思,关于argc刚刚打错了
LPC2103 发表于 2010-11-10 19:02

哦,整型的0-255的退出状态啊……
那exit()呢?

哦,整型的0-255的退出状态啊……
那exit()呢?
jiandingzhe 发表于 2010-11-10 19:16



    0-255?推出只能取0
  exit()倒是有0-255的返回值



~~~~~~~~~~

修改下,其实exit()还可取负的,比如-1
哦,整型的0-255的退出状态啊……
那exit()呢?
jiandingzhe 发表于 2010-11-10 19:16



    0-255?推出只能取0
  exit()倒是有0-255的返回值



~~~~~~~~~~

修改下,其实exit()还可取负的,比如-1
全忘了

只能是int main(),在GNU的规范中main函数是必须要有返回值的,所以07年以前谭浩强的书出现了一个很尴尬的局面,就是所有的代码都无法在LINUX的VI中通过GNU编译除非把void去掉然后加个return值
LPC2103 发表于 2010-11-10 18:46


Warz在的时候请不要通过在计算机软件方面吹牛而自取其辱。gcc几十年前就支持指定标准,分别套用了。使用c89标准,void main()是完全合法的。麻烦用一分钟尝试

gcc -std=c89 foo.c

以后再来喷好吗?

并且,谁告诉你默认就不能不指定-std=c89就不能玩得?gcc foo.c你再尝试一次,再来骗好吗?
我们再退一步,gcc -stdc99 foo.c就不能用void main()了?你尝试一下再喷好吗?

给自己留点脸。
只能是int main(),在GNU的规范中main函数是必须要有返回值的,所以07年以前谭浩强的书出现了一个很尴尬的局面,就是所有的代码都无法在LINUX的VI中通过GNU编译除非把void去掉然后加个return值
LPC2103 发表于 2010-11-10 18:46


Warz在的时候请不要通过在计算机软件方面吹牛而自取其辱。gcc几十年前就支持指定标准,分别套用了。使用c89标准,void main()是完全合法的。麻烦用一分钟尝试

gcc -std=c89 foo.c

以后再来喷好吗?

并且,谁告诉你默认就不能不指定-std=c89就不能玩得?gcc foo.c你再尝试一次,再来骗好吗?
我们再退一步,gcc -stdc99 foo.c就不能用void main()了?你尝试一下再喷好吗?

给自己留点脸。
LPC2103 发表于 2010-11-10 19:47

哦,对C不熟。
有人咬你哦
谭浩强的确实是经典的,我上学那会学的是自己学校教授编写的。。。
warz 发表于 2010-11-10 19:52


    你真的试用过GNU的编辑器吗?默认不指定-std=c89能通过编译?;P
    又是一个大能的VC众,用VC总以为void main()是对的呢;P
jiandingzhe 发表于 2010-11-10 19:57


    他咬的人多了;P
void foo(void)和main能是一样的?;P
LPC2103 发表于 2010-11-10 20:00

给自己留点脸,我从1999年开始玩linux,2004年开始全部用linux,停用windows。
最多的时候,我们项目组要用到300多个linux服务器。
warz 发表于 2010-11-10 20:06

这句话留给你自己吧:D


void main()

无return值在LINUX GNU默认条件下是无法通过编译的,就是初学LINUX C的人也知道,void foo(void)和main是完全不同类型的函数,连这也不知道?:D
VC++,MFC是干活的饭碗,其他的C其实扯淡。曾经在软件公司拼死拼活干活的人的忠告!
莽撞者 发表于 2010-11-10 20:10


    不过嵌入式ARM开发里面基本很难用到VC,大部分环境下的C的代码都是在vim下进行的,当然,基于WINCE的除外
LPC2103 发表于 2010-11-10 20:09

请给你自己留点脸,谢谢。

gcc.JPG
莽撞者 发表于 2010-11-10 20:10

vc开发和c++开发其实可以认为是两种截然不同的技能……

ps:

教材还是别整老谭的了,那个真不行

请给你自己留点脸,谢谢。
warz 发表于 2010-11-10 20:27


   你敢直接用GCC  XX.C -O XX吗?;P别先预设环境把WARNING给IGNORE了:D
请给你自己留点脸,谢谢。
warz 发表于 2010-11-10 20:27


   你敢直接用GCC  XX.C -O XX吗?;P别先预设环境把WARNING给IGNORE了:D
在今年4月份前没有联网更新过的LINUX的发行版都会来这个


我的显示例在这,文件名c2.c
第一个看24L的GCC编译毫无疑问通过,第二个就有问题了;P

我的显示例在这,文件名c2.c
第一个看24L的GCC编译毫无疑问通过,第二个就有问题了;P
用谭C入门,现在几乎都忘光了
TC下好像没这种编译问题,其实初学者编点图形小游戏玩学得快
谨观慎言 发表于 2010-11-10 21:29


    tc和VC是铁定没问题,可是GNU的就有问题了,如果不在兼容模式下
:D
石器时代和航天时代的差距。
说正经的,如果只为学习编程写点东西

为啥不折腾python?抑或干脆去折腾flash?
LAMP或者FLEX/AIR
谭浩强 C语言---这个经典啊
不过随便找本书也行,关键看你会不会用,书的关系不大,看个人体会
谭浩强的书还成,入门很容易
如果不是计算机专业的推荐看
如果是计算机专业的,看《C Primer》或《C和指针》吧
回复 1# 谐奇趣

C语言入门经典(第4版) 简体中文
作者: (美)Ivor Horton
出版社: 清华大学出版社
http://www.verycd.com/topics/2862991/
C语言最好的教材就是:
The C programming language
作者是两位图灵奖得主,也就是C的发明者。看懂这本书就算入门了吧,其他就是一些深入的跟具体开发内容有关的东西。另外,不推荐看中文的计算机教材,翻译质量非常糟糕
C Programming A Modern Approach
K. N. King

虽然是英文版的,但写的通俗易懂。我买的第一本大学教科书,并且是收藏的第一本计算机编程书籍。。虽然现在已经基本不用了。。。

另外给lz的建议:不管你用哪一本,请你务必多动手写
warz 发表于 2010-11-10 20:27

开-Wall看看
不是编译不通过,C99会对这种用法给个告警
warning: return type of ‘main’ is not ‘int’
《C Primer Plus》真的很不错。谭浩强的书实在是太陈旧了。不知道现在是不是还在折腾TC这种古董编译器。

《C how to program》也不错,不过中文版难找。

好像 main 函数从来都是返回 int 类型,当初 写成 mian( ) { } 是当大家默认了,后来才严格起来。
LPC2103说的对 c99 里面 规定 main 只能有如下形式

int main(void)
{
return 0;
}

int main(int argc, char *argv[])
{
return 0;
}

这样才符合标准。标准的意义在于,到了哪儿都对,程序代码移植性良好。void main() 是属于 VC 的特性,微软自己搞得“方言”,不是“普通话”。

老谭的书里错误不少 ,例如
char *a = "I am a student.";
char *b = "You are a student.";
不一定非要学C,看你要编程做什么?.net, java,其实都还不错。桌面程序一般用C++。 编程工具一般用eclipse 或者 visual studio.  桌面程序的C++库还有MFC和wxWidgets,这两种都是比较容易入门的。其他的太多了。先想清楚自己要做什么,这样可以有一个好的方向。
void main也不算啥大问题,我在OpenSUSE 11.3下面编译就没有Warning。老谭当年写这书的时候国内还没开始流行GNU/Linux,他估计就是用TC当标准写的。