回首页 回首页 ◎ 设为首页  
◎ 收藏本站  
◎ 给我留言  
  
  首 页  C/C++教程  C++之父的FAQ  C/C++动向  C/C++源代码  C/C++误区  Unix/Linux  下载中心  乱七八糟  蚂蚁的Blog  
  当前位置:首 页 >> C/C++误区 >> C/C++误区 >> C/C++ 常见误区
最 近 更 新
C/C++ 误区五:检查 new..
C/C++ 误区四:char c =..推荐
C/C++ 常见误区推荐
C 语言编程常见错误 2
C 语言编程常见错误 1
C/C++ 误区三:强制转换..
C/C++ 误区二:fflush(s..推荐
C/C++ 误区一:void mai..推荐
最 新 推 荐
C/C++ 误区四:char c =..推荐
C/C++ 常见误区推荐
C/C++ 误区二:fflush(s..推荐
C/C++ 误区一:void mai..推荐
热 门 排 行
C/C++ 误区一:void mai..推荐
C/C++ 误区二:fflush(s..推荐
C/C++ 常见误区推荐
C/C++ 误区三:强制转换..
C 语言编程常见错误 1
C 语言编程常见错误 2
C/C++ 误区四:char c =..推荐
C/C++ 误区五:检查 new..
站 内 搜 索

Web stdcpp.cn
关键词

搜索方式

搜索范围

精确匹配
广 告

C/C++ 常见误区


来源:周星星之blog 作者:周星星 等级:强烈推荐
发布于2005-10-22 14:43 被读6982次 【字体:

    在此论坛上发现了一些特别的问题,这些问题在其他地方并不存在,猜想是因为这里以学生为主,而学校的教材和教师与IT发展脱节严重。

1. C++虽然主要是以C的基础发展起来的一门新语言,但她不是C的替代品,不是C的升级,C++和C是兄弟关系。没有谁比谁先进的说法,更重要的一点是C和C++各自的标准委员会是独立的,最新的C++标准是C++98,最新的C标准是C99。因此也没有先学C再说C++的说法,也不再(注意这个"不再")有C++语法是C语法的超集的说法。

2. C++/CLI 和 C# 是微软的,它们与C和C++没有任何关系,虽然部分语法相似。但哪两种语言不相似呢?都是abc这26个字母。

3. 不要使用TC/TC++/BC/CB等古老的编译器来学习C/C++,因为它们太古老了,不支持新的C/C++标准。不要使用CBX/VC++6.0/VC2005等对C/C++标准支持不好的编译器,虽然这些编译器适合工作,但不适合学习,因为它们中的语法陷阱很多。记住唯一适合学习的编译器是gcc/mingw。[antigloss注:Dev-C++ 使用的编译器就是gcc & g++]

4. 不要用""代替<>来包含系统头文件,虽然有些编译器允许你这样做,但它不符合C/C++标准。
错误的示例:#include "stdio.h",#include "iostream"。[antigloss注:习惯上,<> 用于包含标准头文件系统头文件,"" 用于包含自定义头文件。标准似乎没有明确规定不准用 "" 包含标准头文件和系统头文件。使用 "" 包含标准头文件或者系统头文件只能说是一种不良风格。]

5. 不要将main函数的返回类型定义为void,虽然有些编译器允许你这样做,但它不符合C/C++标准。不要将函数的int返回类型省略不写,在C++中要求编译器至少给一个警告。错误的示例:void main() {},main() {} [antigloss注:C99和C++98都要求编译器对省略int至少发出一个警告]

6. 不要把VC++中的 #include "stdafx.h" 贴出来,它是预编译头文件。如同上菜时不要把厨师也放到托盘中。

7. [C++]不要#include <iostream.h>,不要#include <string.h>,因为它们已经被C++标准明确的废弃了,请改为 #include <iostream> 和 #include <cstring>。规则就是:
    a. 如果这个头文件是旧C++特有的,那么去掉.h后缀,并放入std名字空间,
        比如 iostream.h 变为 iostream。
    b. 如果这个头文件是C也有的,那么去掉.h后缀,增加一个c前缀,比如 string.h
        变为 cstring;stdio.h 变为 cstdio, 等等。
BTW:不要把string、cstring、string.h三个头文件搞混淆
BTW:windows.h不是C/C++的标准文件,因此它的命名C/C++不管。

8. 不要再写 char* p = "XXX" 这种语句,要写成 const char* p = "XXX",编译器之所以让前者通过编译是为了兼容以前的大量的旧代码。[antigloss 注:这段话对 C++ 而言是正确的。但是,目前的 C99 标准似乎并没有定义 "XXX" 一定是常量。]
BTW:const TYPE* p 和 TYPE const* p 是一样的,风格不同而已。
BTW:C语言中也有const关键字。

9. 不要在同一条语句中包含一个变量的多个++/--,因为它们的解析在C/C++标准中没有规定,完全取决于编译器的个人行为。

10. C/C++ 是平台无关性语言,因此系统相关的 process/GUI 等不在标准 C/C++ 库中。比如 graphics.h 和 windows.h 等是由某个编译器提供的,而不是由C/C++ 提供的。

11. C/C++只是语言,而且是平台无关性语言。论坛上有部分人甚至认为C就是dos,C++就是windows,那么请问linux是什么?

12.[C++]面向对象曾经是设计C with class(C++的前身)的主要目的,但C++不是,C++是一个多典范语言。主要支持过程调用、基于对象、面向对象、泛式编程这四种编程典范。当然还支持functional, generative,metaprogramming等典范。

13. 语法学家不是文学家,所以当你学会了一门计算机语言时,你还需要学习数据机构和算法,还需要掌握工具和平台API的用法。

14. C/C++ 是通用语言,因此语法很复杂,你应当裁减成适合你自己的语法集合,比如裁减成 better C 和 ADT。

15. C/C++是通用语言,因此只含通用的库,你应该丰富自己需要的库,比如汽车工业协会有自己的C/C++函数/类/模板库。

本文乃网上搜集得来,其版权归原作者和原出处所有。如有侵犯版权之处请与我联系,我将马上进行处理。



相关专题:暂无相关专题

上一篇:C/C++ 误区三:强制转换 malloc() 的返回值
下一篇:C/C++ 误区四:char c = getchar();

共有评论 10 条 网友评分 2分 查看全部评论

游客:linunix
评分:0
好文章,对入门者来说解了不少疑惑。
游客:c++的支持者
评分:0
C++永远比c先进。——c++的支持者
游客:jjjj
评分:1
本评论不符合c和c++的历史发展和语言发展面貌!
游客:只求不愧于心
评分:0
C++永远比c先进。——c++的支持者.
屁话,C++机制复杂,同样的功能C++程序生成的代码要多,至少在某方面根本不如C
游客:antigloss
评分:0
说 C++ 比 C 先进的不了解 C。同样,说 C++ 在某方面不如 C 的人不了解 C++。C++ 的伟大之处在于其广泛接纳了多种编程思想。

同样功能的 C++ 程序生成代码比 C 多?生成代码多通常是库的问题,而 C++ 是完全可以使用 C 函数库编程的。用 C 编写的程序稍加修改就可以变成 C 风格的 C++ 程序。我不认为这种程序生成的代码会比 C 多。
游客:土豆
评分:0
12,14,15条看不懂.不过大部分建议对我很有用.受教了.
游客:cgh
评分:0
对于的区别,作者并没有搞清楚,他们的区别在于查找头文件的路径不同,而不在于是否为自定义。
VC2003以后的版本,已经相当复合标准化的要求了。不要以老观点看问题。
游客:cgh
评分:0
在char指针的问题上,作者说的不错

查看全部评论

【发表评论】 评分:1分 2分 3分 4分 5分


验证码:

Powered By Www.Xydw.COM Ver1.14 管理
Copyright © 2005-2006 蚂蚁的 C/C++ 标准编程 All Right Reserved. XCMS
粤ICP备06014124号   站长:Antigloss