最初的起点 — Hello World

一切的开始

大概每个程序猿的第一个程序都是Hello World,这是梦开始的地方。本文是C++入门系列博客的第一篇,让我们从最经典的Hello World 开始。看代码

#include <iostream>using namespace std;int main()
{cout << "Hello World" << endl;return 0;
}

现在,我们逐行分析一下这一段经典代码。


#include <iostream>

#include 指令用来包含程序所用到的头文件。这里告诉编译器想要使用的是 iostream 库, 尖括号中的名字指出了头文件的名字。需要注意的是,#include指令和头文件的名字必须 放在同一行。我们一般将#include指令放在源文件开始的位置。另外,一般<>引用的都是标准的库文件,如果使用自己写的头文件,一般使用"", 而非<>. 例如: #include "myHeader.h", ""之中是所要使用的头文件位置,可以加路径。不加路径默认是当前文件路径。关于标准输入输出流iostream读者可以参看相关文档,这里不展开讲。


using namespace std;

这句代码的意思是使用标准的命名空间。 using 关键字一般用来声明某个命名空间,也叫作 using 声明(using declaration). using声明的形式如下:

using namespace::name;

namespace叫做命名空间,命名空间的作用是避免我们名字定义冲突。举个例子,你的小名叫小明,你隔壁王叔叔的儿子小名也就小明,当你们一起玩耍时,别人喊小明,你们就不确定喊的是谁了,傻傻的计算机更分不清。所以就需要命名空间来指定到底喊的是谁了,像这样 王叔叔::小明 那就表明喊的是王叔叔家的小明了。这个::叫做作用域运算符。标准库定义的所有名字都在命名空间std中。


int main(){}

每个C++程序必须包含一个或多个函数,其中一个必须命名为main,操作系统通过main来运行C++程序,它为程序入口。 一个函数的定义分为四个部分,返回类型(return type)、函数名(function name)、形参列表(parameter list)、函数体(function body). 此处返回类型为int,函数名为main,形参列表为空,函数体为{}包括起来的内容。

main函数的返回类型必须为int,即整数类型,int 类型是一种内置类型,即语言自身定义的类型。

你也许表示不服,我明明看过main函数的返回值可以为void的。这其实是一种不标准的做法,在VC、VS的编译器能编译通过,但在其他标准的编译器下,就编译不过了。不信你试试gcc编译器。


cout << "Hello World" << endl;

cout 标准输出对象,名字定义在std命名空间下。cout标准输出(standard output),与之对应的还有标准输入(standard input) cin. 除此之外,比较不常用的还有cerrclog. 顾名思义,看名字基本上就能知道它是干嘛的了。

<< 为 输出运算符, 这个运算符接受两个运算对象,左侧的对象必须是一个ostream对象,右侧运算符是要打印的值。
endl 为操纵符,表示换行。 与转义字符"\n"是一样的。


return 0;

main函数的返回值。

在大多数的系统中,main函数的返回值用来指示状态,返回0表示成功,非0的返回值的含义由系统定义,通常用来指出错误类型。

编程工具

工欲善其事,必先利其器

编程工具这东西各有所好,推荐几款,是笔者比较常用和喜爱的。

  • VS系列
  • Code::Blocks
  • Sublime Text

重量级的IDE还是力推Visual Studio,至于版本,推荐使用VS2010及以上。个人编程的话,建议直接上VS2015,VS2015号称全宇宙最强的IDE,各方面功能不是盖的,其他IDE望尘莫及。笔者强烈建议不使用VC6.0,这坑爹玩意用的根本不是标准的语法,最恶心的就是它变量的作用域了。VC6.0已经被时代淘汰,虽然国内很多教材的实例都是用VC6.0写的。

轻量级的IDE推荐Code::Blocks,虽然功能不如VS强大,好在它是跨平台的IDE,各方面功能做的也不错。长期刷题的童鞋们可以使用看看。

如果你写的是小型程序,或者觉得自己足够牛逼,不需要任何IDE,那么,我推荐这款Sublime Text编辑器了,它支持语法高亮,Sumlime Text是程序猿最喜欢用的编辑器之一了。谁用谁知道。上个图感受一下。

当然,如果你是Linux用户,并长期使用Vim,那么我觉得,很难再有编辑器入的了你的法眼了。

书籍推荐:

  • C++ Primer(第五版)

对,你没看错,我就推荐这一本。学习完并掌握这本书的知识点,找个C++相关编程工作完全没有问题。这本书基本上是C++中圣经级别的存在了,而且,它还比较适合初学者。学习C++的首选,它包罗万象,还可以当工具书来翻阅。C++程序猿基本上人手一本。

黑魔法

如果你觉得上面的程序足够简单,根本不屑一顾,那么看下面两个Hello World,是否会觉得眼前一亮呢?

  1. 外星人说的"Hello World".

     #include <iostream>using namespace std;void alien_say(char * p){while (putchar(*(p += *(p + 1) - *p)));}int main(){return alien_say("BETHO! Altec oh liryom(a loadjudas!) dowd."), 0;}
    
  2. 预处理迭代的"Hello World"

     #define _________ } #define ________ putchar #define _______ main #define _(a) ________(a); #define ______ _______(){ #define __ ______ _(0x48)_(0x65)_(0x6C)_(0x6C) #define ___ _(0x6F)_(0x2C)_(0x20)_(0x77)_(0x6F) #define ____ _(0x72)_(0x6C)_(0x64)_(0x21) #define _____ __ ___ ____ _________ #include<stdio.h> _____
    

以上两段代码作者不详,侵删。
实现原理就不一一说了,但请注意,在实际工作中,千万不要写这种技巧性很高的代码,不然被你同事打死都不知道是怎么回事,切记,切记。

结束语

以"Hello World"开启代码人生,后面的路还有很长。我们的征途是星辰大海。

C ++入门系列博客一 最初的起点 — Hello World相关推荐

  1. RecBole小白入门系列博客(二) ——General类模型运行流程

    RecBole小白入门系列博客(二) --General类模型运行流程 写在前面 选定模型 设置模型超参数 选定数据集 数据集基本格式 设置数据集参数 设置训练参数 设置评测参数 总结参数设置 运行 ...

  2. 2021-08-26 转载 Scala快速入门系列博客文章

    作者:Huidoo_Yang 出处:http://www.cnblogs.com/yangp/ 本文版权归作者Huidoo_Yang和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面 ...

  3. Python Web企业门户网站—系列博客教程介绍

    本系列教程将使用Python Web的Django框架实现企业门户网站的制作.本教程一共分为8篇博文,将从最基础的Python语法讲起,然后使用Django3逐步搭建一个完整的企业门户网站项目实例.如 ...

  4. 【云计算】云上建站快速入门:博客、论坛、CMS、电子商务网站统统

    免费网站怎么建,空间也能免费吗? 免费网站怎么建立,免费网站并非免费空间 互联网真的有免费建站这等好事? 现在制作一个网站已经越来越容易了,只要知道清晰的流程之后都是可以很快的建好一个企业或者个人网站 ...

  5. LINQ之路系列博客后记

    缘起 今年3月,我换了工作单位.后来多次收到公司的新人培训邮件,不过对此我并不感冒,说实话并不喜欢这种活动.印象中,新人培训无非是唠叨些公司的规章制度.侃述一下公司的光辉历史还有灿烂的未来发展等等.规 ...

  6. SpringCloud系列博客父工程xml依赖

    SpringCloud系列博客父工程xml依赖 <?xml version="1.0" encoding="UTF-8"?><project ...

  7. flutter text 自动换行_Flutter 系列博客——05 StatelessWidget vs StatefulWidget

    前言 上一篇我们对 Flutter UI 有了一个基本的了解. 这一篇我们通过自定义 Widget 来了解下如何写一个 Widget? 然而 Widget 有两个,StatelessWidget 和 ...

  8. 大数据系列博客之 --- 深入简出 Shell 脚本语言(提升篇)

    首先声明,此系列shell系列博客分为四篇发布,分别是: 基础篇:https://www.cnblogs.com/lsy131479/p/9914747.html 提升篇:https://www.cn ...

  9. Flutter 即学即用系列博客——09 MethodChannel 实现原生与 Flutter 通信(二)

    前言 上一篇我们讲解了如何通过 EventChannel 实现 Android -> Flutter 的通信. 并且也看到了 Flutter 内部 EventChannel 源码也是对 Meth ...

  10. flutter 返回指定界面_Flutter 即学即用系列博客——04 Flutter UI 初窥

    前面三篇可以算是一个小小的里程碑. 主要是介绍了 Flutter 环境的搭建.如何创建 Flutter 项目以及如何在旧有 Android 项目引入 Flutter. 这一篇我们来学习下 Flutte ...

最新文章

  1. Python的Xpath介绍和语法详解
  2. 怎么主动发起话题_约会的时候,多聊这4个话题,女人才会失去抵抗力
  3. linux下删除乱码文件、目录
  4. 柔性机械臂_CSR论文精选 | 基于视觉的双连杆柔性机械臂末端位置跟踪控制
  5. mac系统jmeter生成html报告,jmeter5.1.1 生成html报告
  6. 随机森林和gbdt结合_决策树与迭代决策树(GBDT)
  7. 节能prru进入深度休眠节能_2021-2024年中国工业节能行业深度调研及投资前景预测报告...
  8. android学习笔记---使用AsyncTask实现异步处理,内部使用线程加Handler
  9. xp 系统 mysql日志文件在哪里_SqlServer修改数据库文件及日志文件存放位置教程
  10. windows进行udp端口转发
  11. sql注入攻击与防御java_注入攻击(SQL注入防御)
  12. html 前端分页代码怎么写,纯JavaScript实现的前端分页代码
  13. java image 内存不足_java内存不足的解决方法
  14. Android之FileProvider详解
  15. 新手应该如何学习SEO优化
  16. 常用通达信l2行情接口文件夹说明
  17. dedecms织梦后台登录一直提示验证码错误
  18. 职业 行业 2 博客
  19. git bash shell 脚本 :从文件获取git仓库列表 git clone所有仓库
  20. 部门新来了个阿里25K出来的,让我见识到了什么是天花板

热门文章

  1. oracle热点表online rename
  2. easyui学习笔记3—在展开行内的增删改操作
  3. mysql workbench 建表时PK, NN, UQ, BIN, UN, ZF, AI
  4. addEventListener监听
  5. [Jscript]Js导出Excel
  6. STORM的DRPC通讯
  7. Spark OOM:java heap space,OOM:GC overhead limit exceeded解决方法
  8. Java NIO框架Netty教程(四) – ServerBootStrap启动流程源码分析
  9. jdk及tomcat的安装
  10. echarts环形图加边框