C/C++ 常见误区

news/2024/7/4 14:49:38
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++函数/类/模板库。


http://www.niftyadmin.cn/n/3649674.html

相关文章

[JavaME]手机也能玩转点对点的MSN传情动漫

郑昀ultrapower产品名称产品版本Keyword: Mobile 传情动漫 Wink MSN Messenger Media 媒体播放 j2me midp2.0WMA PushRegistryPopupWinksMobile0.0.1 BETA手机也能玩转MSN传情动漫&#xff01; J2ME实作摘要&#xff1a;本文档并不是一个关于PopupWinks On Mobile 之Kjava版本…

移动端开发:ionic如何与服务端进行数据交互

一、查看数据库表内容&#xff08;以新闻表为例&#xff09; 二、使用postman检查服务端接口是否可以正常获取数据 1、getNewsList方法用于新闻表多个数据查询 2、getSingleNewsById方法用于新闻表单个个数据查询 三、编写移动端代码 1、建立模型类News 新建model包用于存放…

水滴石穿C语言之指针综合谈

概述Joel Spolsky认为&#xff0c;对指针的理解是一种aptitude&#xff0c;不是通过训练就可以达到的。虽然如此&#xff0c;我还是想谈一谈这个C/C语言中最强劲也是最容易出错的要素。鉴于指针和目前计算机内存结构的关联&#xff0c;很多C语言比较本质的特点都孕育在其中&…

如何使用Doctl,DigitalOcean官方命令行客户端

An earlier version of this tutorial was written by Brennen Bearnes. 本教程的早期版本由Brennen Bearnes编写 。 介绍 (Introduction) DigitalOcean’s web-based control panel provides a point-and-click interface for managing Droplets. However, you may prefer a …

前端:Angular框架和Ionic框架的生命周期详解

一、angular 生命周期钩子 ngOnInit()在Angular第一次显示数据绑定和设置指令/组件的输入属性之后&#xff0c;初始化指令/组件&#xff1b;ngAfterViewInit()初始化完组件视图及其子视图之后调用。 ngOnInit() 钩子是我们用得最频繁的一个&#xff0c;在使用新建组件命令ng …

将著名的反波播客默认加入到iPodderX On Mobile的频道里

经过测试&#xff0c;可以将著名的反波播客默认加入到iPodderX On Mobile的频道里了。请下载toodouPodcastMidlet-deployed.rar&#xff0c;建议在Nokia S60系列模拟器上测试。不过&#xff0c;反波播客的mp3下载太慢了&#xff0c;所以需要服务器端预先载入并转换。资源我的IP…

现实世界+虚拟世界=n倍的现实世界

虚拟空间的再定义 在计算机术语中有这样一个定义&#xff0c;虚拟空间即虚拟主存&#xff0c;它与IP地址密切相关。但是本人认为虚拟空间就是虚拟空间&#xff0c;它不同于虚拟主存。因为它的侧重点在“空间”上。那么什么是虚拟空间。举个简单的例子&#xff0c;当你看一本小说…

服务器升级debian9_如何在Debian 9上设置PageKite前端服务器

服务器升级debian9The author selected the Open Internet/Free Speech Fund to receive a donation as part of the Write for DOnations program. 作者选择了“ 开放互联网/言论自由基金会”作为“ Write for DOnations”计划的一部分来接受捐赠。 介绍 (Introduction) Priv…