电脑报官方论坛

 找回密码
 注册
楼主: wangweinoo1

编程及C/C++初学者 FAQ     [复制链接]

一代宗师

【风云堂】堂主

Rank: 12Rank: 12Rank: 12

树叶
1181
金币
171
积分
1737

斑竹纪念章 织网者(站长大本营) Programmer(编程魔方)

发表于 2009-6-11 07:05:59 |显示全部楼层
目前我还没用过专门编译C的编译器:42;
:)

功成名就

Diva Dance

Rank: 9Rank: 9Rank: 9

树叶
60
金币
8855
积分
562

Programmer(编程魔方)

发表于 2009-6-11 07:35:40 |显示全部楼层
因为总是 C/C++ 编译器来得多,Intel 编译器直接就叫 C++ 编译器了,然后里面的说明附加了支持 C99 。
VC 好郁闷,就算是 VC9 也只支持 C95 。gcc 也能编译 C++ 程序,但是传说 gcc 用的是部分 C 标准,g++ 则是完全 C++ 标准,然后 g++ 编译 C 程序也是部分 C++ 标准。BCB 2009 么情况也差不多,就是对 C++ 的 Template 解析能力有点差。
最后 keil C 这样的“纯”C 环境么又不是 C99(其实连 C89 都不是),所以其实不用在意这么多啦,开了 -std=c99 这样的选项的话也就是语法解析器的规则稍微换了一下,最后的编译结果差不了多少。

Rank: 4

树叶
0
金币
124
积分
44
发表于 2009-6-11 22:52:04 |显示全部楼层
一直想学C

Rank: 6Rank: 6

树叶
5
金币
1947
积分
151
发表于 2009-6-11 23:37:31 |显示全部楼层
原帖由xpycc于 2009-6-10 08:03 发表我没有要指责你的意思啊……我只是谈了谈里面的时弊罢了,也就是现在很多人在犯的错误,所以拿出来大家讨论下而已。恕我冒犯,这种话根本一点用都没有。“掌握语言”是怎么定义的?就是一个人对语言有足够 ...
分析得相当到位。很有道理!我很佩服。

功成名就

Diva Dance

Rank: 9Rank: 9Rank: 9

树叶
60
金币
8855
积分
562

Programmer(编程魔方)

发表于 2009-6-12 07:56:02 |显示全部楼层

回复 24楼 czhc 的帖子

厄,也就是发表下自己的观点大家讨论下啦,有错误还请指出。

Rank: 2

树叶
0
金币
448
积分
8
发表于 2009-6-12 10:40:31 |显示全部楼层
非常感谢,等我细看!

Rank: 2

树叶
0
金币
183
积分
14
发表于 2009-6-12 13:40:46 |显示全部楼层

回复 1楼 wangweinoo1 的帖子

下载下来看一看,,,

Rank: 8Rank: 8

树叶
0
金币
10726
积分
483

Programmer(编程魔方) 漫游者(动漫&游戏)

发表于 2009-6-13 04:52:01 |显示全部楼层

受人之托

先挑faq的bug
"GCC的Win32版有Dev-cpp,MinGW等不同发行形式。"
DevC++只是一个用Delphi写的IDE(还写得很烂……),GCC的移植什么的它们根本不做的,在做的只有MinGW那帮人(Cygwin的话,很难说算不算……)


"到论坛和usenet寻求帮助等等"
相信我,能用(倒不是usenet难用,而是知道这个交流方式的人太少)usenet的绝对不是菜鸟


"但读代码也是辛苦的事,请阅读和你水平相当的代码,差距太大将会是严重的身心打击。"
无论如何请挑最优秀的代码阅读,阅读烂代码才是对身心的严重摧残(顺便培养不良的编程风格例如bool jianchabianhao()什么的)
当然阅读烂代码也能找一些优越感和自信:q21;


"编写一个QQ或者BT,绝对能让你对网络操作部分了如指掌。在这个阶段,你已经可以写出实用的程序了,为什么还要执着于做题呢。"
如果你完成了QQ或BT,恭喜,你已经从此FAQ毕业了,余下部分可以跳过。
(附额外要求:半个月后让你为这个程序加功能你还能做到)


"即使你顺利的学习了一万种语言,你也会觉得编程很难,如果你没有学习算法的话。"
再附加一条,即使你学习了一万种算法,如果你没有学设计模式(针对OO,OP或其他什么的自有叫法)那么你还是会觉得编程(实用程序)很难
BT的核心算法实际并不复杂,甚至简单到了让人吃惊的地步(local rarest first)
但是实现一个bt client还是很复杂,超乎你的想象。


"C语言是什么"&"C++语言是什么"
考古部分可以省略,至今我不知道C语言之父是谁,C++语言之父的名字我也拼不出来,但并不妨碍我用它们写程序
用钱钟书的话来说就是假如你吃了个鸡蛋,觉得味道不错,何必要认识那个下蛋的母鸡呢。


"因此在很多平台上没有现成的C++编译器"
这不是原因,g++能工作的平台比多数人见过的都多。
不用C++不是因为没有,而是因为C比C++容易贴近核心(好吧谁能不看Inside C++ Object Model等书就能猜出virtual function是怎么实现的?更别提虚拟继承什么的了)


"java 只要用一句话就可以概括,它是一种简化了的跨平台的C++语言。掌握了C++的人,学习java几乎是轻而易举。"
学确实容易,但是思路的转变不是那么容易的
大部分语言的能力都相当于图灵机,但是不能因为这个就说所有的语言是相同的——哦老天,能参透这一点从而无视语言差别的人是不需要看此faq的……


"程序到底是怎么回事————是操作而不是结果"
一句话:Go to learn the m*ther f**king assembly language
不过另一方面,学Linux也是一条,UNIX的“文件”概念比Windows下的要广泛的多(嗯,不如这么说,UNIX中文件在Windows中的对应概念一般人看不到……)


"有专门的3D加速图形库被开发出来,最著名的就是DirectX和OpenGL"
OpenGL不是库,只是一个标准
在Windows下OpenGL的实现由硬件厂商负责(这也是为什么Windows的自带驱动虽然工作的很好,但是不支持OpenGL的原因)


"第四本:王大刚先生的《C语言编程宝典》。
    质量不错,与老谭的书一样非常适合中国学生,而且对于TC的图形编程讲解非常透彻。"
这在10年、啊不,应该是15年前也许还比较有吸引力,但是现在嘛……在我看来纯粹是浪费纸罢了


"相对照的MSDN宇宙版至少需要几百美元。"
MSDN Pro已开放免费下载


"各种图形以及其它库"
学习函数库最快的方法是看sample,而不是Read the F**king manual


"《Design Patterns:Elements of Reusable Object-Oriented software》(设计模式:可复用面向对象软件的基础),这是软件复用的权威教材,不过似乎要有很久编程经验之后才能领会。"
这本书看得越晚越吃亏,相信我


"《The Mythical Man-Month: The Essays on Software Engineering》(人月神话)"
必读经典,不过不比操之过急,等你准备开始写一个小的系统在看也不迟
(话说上两本书已经远超初学者的范围了……)


"VC2005分为好几个版本,其中有一套叫做Express版的值得一提。他是微软送出的免费版,专门提供给学生和爱好者使用,功能上有删节,主要是图形界面和大量的工业用库和工具被裁减,而且基本只能在命令行编译。"
谁说只能在命令行编译的……
Vistual C++ 2008 Express是首选,别用DevC++或者VC6,那不是折腾自己么……


"七、其它编译器问题"
过失的文档比没有文档还麻烦……这些东西在VC6之后(不包括VC6)已经变化很多了


"实际上,对开发计算机软件来说,没有什么做不了的软件,所有的软件都能做"
把说这句话的人拖出去重修计算理论


原帖由 风云の三少 于 2009-5-30 16:05 发表
没用过,好像也是个集成了MinGW的开发环境
应该蛮好用的!

那东西我用了不到半个小时就删了
存个盘都把光标移动到行首,这bug让我受不了

另外Code::blocks很久没动静了,不执着于FLOSS的话直接上ms的vc express好了。

原帖由 风云の三少 于 2009-6-11 07:05 发表
目前我还没用过专门编译C的编译器:42;

除了gcc,我见过的都是混合型编译器
毕竟语法分析部分差不多少,语义分析两者的差别也不多

原帖由 xpycc 于 2009-6-10 08:03 发表

在 C 中这些都是可行的,形式都很简洁,但是在 C++ 的某些情况下,比如迭代器,它们只重载了 operator++ ,因为它在逻辑上不需要也不能有 operator[] 存在,那么就只能用下面一种方式了。它的灵感来自哪里?当然是以往的 C 编程经验。

只重载++的迭代器最多是bidirectional iterator,例如list什么的的迭代器,这时候就算用C也没法用你所说的上一种方式
so,比较不成立

原帖由 klarkzby 于 2009-6-9 22:32 发表
程序员怎样才能达到编程的最高境界?最高境界绝对不是你去编两行代码,或者是几分钟能写几行代码,或者是用什么所谓的可视化工具产生最少的代码这些工作,这都不是真正的高手境界。即使是这样的高手,那也都是无知者的自封。

我认为,一个程序员的成长可分为如下六个阶段。

Ø         第一阶段
此阶段主要是能熟练地使用某种语言。这就相当于练武中的套路和架式这些表面的东西。

Ø         第二阶段
此阶段能精通基于某种平台的接口(例如我们现在常用的Win 32的API函数)以及所对应语言的自身的库函数。到达这个阶段后,也就相当于可以进行真实散打对练了,可以真正地在实践中做些应用。

Ø         第三阶段
此阶段能深入地了解某个平台系统的底层,已经具有了初级的内功的能力,也就是“手中有剑,心中无剑”。

Ø         第四阶级
此阶段能直接在平台上进行比较深层次的开发。基本上,能达到这个层次就可以说是进入了高层次。这时进入了高级内功的修炼。比如能进行VxD或操作系统的内核的修改。

这时已经不再有语言的束缚,语言只是一种工具,即使要用自己不会的语言进行开发,也只是简单地熟悉一下,就手到擒来,完全不像是第一阶段的时候学习语言的那种情况。一般来说,从第三阶段过渡到第四阶段是比较困难的。为什么会难呢?这就是因为很多人的思想转变不过来。

Ø         第五阶级
此阶段就已经不再局限于简单的技术上的问题了,而是能从全局上把握和设计一个比较大的系统体系结构,从内核到外层界面。可以说是“手中无剑,心中有剑”。到了这个阶段以后,能对市面上的任何软件进行剖析,并能按自己的要求进行设计,就算是MS Word这样的大型软件,只要有充足的时间,也一定会设计出来。

Ø         第六阶级
此阶段也是最高的境界,达到“无招胜有招”。这时候,任何问题就纯粹变成了一个思路的问题,不是用什么代码就能表示的。也就是“手中无剑,心中也无剑”。

此时,对于练功的人来说,他已不用再去学什么少林拳,只是在旁看一下少林拳的对战,就能把此拳拿来就用。这就是真正的大师级的人物。这时,Win 32或Linux在你眼里是没有什么差别的。
  

靠,这么看下来我还在Level 1徘徊呢
自认为C++远没有做到精通,而学Lisp肯定也不是一两个星期的事情
Win32 API要用必查MSDN,从没用过plantform sdk写过程序

另外写VxD是没戏了,Win98早就不用了
更别提在Win 7 X64下的Kernel Patch Protection机制下搞内核修改……看来我只能玩玩WRK了:q1;

[ 本帖最后由 洞里的火 于 2009-6-13 13:20 编辑 ]
已有 1 人评分评分 金币 收起 理由
风云の三少 + 2 + 5 原创内容

总评分: 评分 + 2  金币 + 5   查看全部评分

功成名就

Diva Dance

Rank: 9Rank: 9Rank: 9

树叶
60
金币
8855
积分
562

Programmer(编程魔方)

发表于 2009-6-13 07:13:43 |显示全部楼层

回复 28楼 洞里的火 的帖子

嗯,谢谢火牛……
原帖由 洞里的火 于 2009-6-13 04:52 发表
只重载++的迭代器最多是bidirectional iterator,例如list什么的的迭代器,这时候就算用C也没法用你所说的上一种方式
so,比较不成立

我好像没有要比较的意思,我的意思是迭代器如 *it++ 这样的用法是从 C 编程经验那里借来的。
而且 MS 我还不知道 C 里面怎么用 ++it 这样的形式实现 p=p->next 这种东西。

还有您的最后一个引用是什么意思?怎么突然没话了?难道是有错误吗?

一代宗师

【风云堂】堂主

Rank: 12Rank: 12Rank: 12

树叶
1181
金币
171
积分
1737

斑竹纪念章 织网者(站长大本营) Programmer(编程魔方)

发表于 2009-6-13 07:14:45 |显示全部楼层
好像是04.54时编辑掉了
:)
您需要登录后才可以回帖 登录 | 注册


感谢版主

Archiver|手机版|电脑报官方网站 ( 渝ICP备10009040号 

GMT+8, 2017-12-13 21:14

回顶部