不要使用TC/TC++/BC/CB等古老的编译器来学习C/C++
2013-03-06 14:49
423 查看
在此论坛上发现了一些特别的问题,这些问题在其他地方并不存在,猜想是因为这里以学生为主,而学校的教材和教师与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。
4. 不要用""代替<>来包含系统头文件,虽然有些编译器允许你这样做,但它不符合C/C++标准。
错误的示例:#include "stdio.h",#include "iostream"
5. 不要将main函数的返回类型定义为void,虽然有些编译器允许你这样做,但它不符合C/C++标准。
不要将函数的int返回类型省略不写,在C++中要求编译器至少给一个警告。
错误的示例:void main() {},main() {}
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.h>、<cstring>、<string>三个头文件搞混淆
BTW:windows.h不是C/C++的标准文件,因此它的命名C/C++不管。
8. 不要再写 char* p = "XXX" 这种语句,要写成 const char* p = "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,meta programming等典范。
13. 语法学家不是文学家,所以当你学会了一门计算机语言时,你还需要学习数据机构和算法,还需要掌握工具和平台API的用法。
14. C/C++是通用语言,因此语法很复杂,你应当裁减成适合你自己的语法集合,比如裁减成better C和ADT。
15. C/C++是通用语言,因此只含通用的库,你应该丰富自己需要的库,比如汽车工业协会有自己的C/C++函数/类/模板库。
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。
4. 不要用""代替<>来包含系统头文件,虽然有些编译器允许你这样做,但它不符合C/C++标准。
错误的示例:#include "stdio.h",#include "iostream"
5. 不要将main函数的返回类型定义为void,虽然有些编译器允许你这样做,但它不符合C/C++标准。
不要将函数的int返回类型省略不写,在C++中要求编译器至少给一个警告。
错误的示例:void main() {},main() {}
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.h>、<cstring>、<string>三个头文件搞混淆
BTW:windows.h不是C/C++的标准文件,因此它的命名C/C++不管。
8. 不要再写 char* p = "XXX" 这种语句,要写成 const char* p = "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,meta programming等典范。
13. 语法学家不是文学家,所以当你学会了一门计算机语言时,你还需要学习数据机构和算法,还需要掌握工具和平台API的用法。
14. C/C++是通用语言,因此语法很复杂,你应当裁减成适合你自己的语法集合,比如裁减成better C和ADT。
15. C/C++是通用语言,因此只含通用的库,你应该丰富自己需要的库,比如汽车工业协会有自己的C/C++函数/类/模板库。
相关文章推荐
- 改善C++ 程序的150个建议学习之建议15:尽量不要使用可变参数
- Effective C++学习笔记 条款06:如不想使用编译器自动生成的函数,就该明确拒绝
- c++跨平台技术学习(一)--使用公共的代码
- C++ 使用boost asio学习 搭建简易service
- C++文本查询程序 不要定义类和智能指针管理数据 C++Primer练习12.28 使用vector,map,set容器保存来自文件的数据并生成查询结果
- C++之父元旦专访(8+13个问题,关于C++的学习&使用和未来)
- c++跨平台技术学习(三)--使用标准API
- c++ inlineing内联函数不要使用static对象
- 在 console mode 中使用 C/C++ 编译器 - 侯捷
- 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)
- Effective C++ Item 6 若不想使用编译器自动生成的函数,就该明确拒绝
- c++学习笔记:使用锋利的sstringstream完成类型转换
- 使用ultraedit和cl编译器打造简易c/c++开发环境
- C++学习之【使用位操作符求素数分析】
- linux环境下学习使用pro*c/c++工具
- C++学习记录19--运算符重载为什么要使用引用(=)
- 动态库学习 第1章——演练:创建和使用动态链接库 (C++)
- c++学习.抽象类使用
- NSIS学习笔记(二)-使用C++开发NSIS插件
- 使用doxygen从c++代码中生成文档的方法学习