今天开始写下一系列C和C++从入门开始的文章。

简单说几句C和C++的关系。C语言早于C++。

C语言

贝尔实验室的Ken Thompson发明了 UNIX,当时有个B语言的。后来D.M.Ritchie加入到这个项目,主要目的就是改进B语言,于是乎C语言诞生了(K&R)。现在很多计算机底层的东西都是C语言实现的。

C++语言

同样来自贝尔实验室的 Bjarne Stroustrup  发明了C++语言,期初只是在C语言的基础上加了面向对象的东西,后来才加上模板,STL等特性。

值得一提的是,贝尔实验室的最初的 cfront 编译器 (第一款C++编译器),是将C++语言翻译成C语言来实现的。

这些历史,权当做八卦来看就行,对新手学习C和C++,我建议大家先从C语言学起,熟悉指针,内存操作等之后,再学C++,最后再看C++11以后的新特性。

好了,言归正传,学习C语言,首先需要有一个能写程序的工具,需要能够编译,运行的工具。如果想了解细节,还需要工具能够调试。

我们先说一下工具。

编译器: 我主要在 Linux 和 windows 平台做开发,所以会用这两个操作系统做编译环境。

编辑器:很多人推荐vim ,鉴于windows平台用户众多,新手对 vim 操作不太顺畅,所以建议使用VS Code, 一个跨平台的开源编辑器。

先说说 windows 环境,在windows上入门,用visual studio 就行。(Visual Studio C++ 的架构师可是 cfront1.0版本的主力作者李普曼,C++Primer的作者)。qt确实跨平台做的好,UI也比较简单,我还是建议用VS做入门。后边用到UI的时候我们再说QT。

我的windows VM 版本是2012,Visual Studio 的版本是2015. 微软提供简单的安装步骤,直接按照提示安装就行。注意,VS2015在选中安装模块时,C++不在默认范围内,所以需要选中C++模块才行。

安装完之后,打开 VS,选择文件,新建项目,语言选择C++,如果能正常出来下边的窗口,说明C++模块安装正常

我的Linux VM 版本是Red Hat 7.7 版本,gcc 版本是4.8.5. RH 安装gcc 时直接在命令行输入 yum install gcc. 这时候会自动下载安装 gcc。刚刚这个命令只会安装 gcc,不会安装 g++,所以如果在后边我们学习进入C++阶段时,g++是必须的,所以需要把g++ 也安装上,输入yum install gcc-c++ 即可安装g++ 。安装完后,输入 gcc -v 和 g++ -v 能看到安装的版本。如图:

好了,接下来,我们要在这两个平台上实现鼎鼎大名的 Hello World 了。

程序非常简单。

 #include <stdio.h>
int main()
{
printf("Hello World!\n");
}

第一行,引入头文件,该头文件中包含程序需要的库函数的函数声明。

第二行,程序入口,可执行程序的程序入口是 main 函数(可以有参数,因为这里不涉及,所以只定义了main函数)

第四行,程序主体,printf,标准输出,函数声明在 stdio.h 文件中能找到,所以需要在第一行引入头文件。输出末尾是 "\n", 标准换行符,程序语句以 ";"结束。

第三行和第五行,用 {} 将程序封装到一个程序块中(block),C和C++程序的函数都是以 {} 封装。这两行封装了main 函数的主体。

windows环境的Visual Studio集成了编译,运行,调试。切记扩展名会影响编译结果,我们使用扩展名为 .c, 而不是VS默认的.cpp. 这样会以C语言来编译。

Linux 下,需要自己写命令来编译。假设我们的源文件叫 main.c, gcc main.c, 默认输出可执行文件 a.out. 我们可以指定输出文件。 gcc main.c -o main, 输出文件为 main.

当我们运行编译出来的结果时,会在控制台输出 Hello World! 并换行。

好了,第一讲先说这么些,后边会慢慢进阶C和C++。

 

 

C和C++从零开始系列(一)的更多相关文章

  1. Nordic NRF51822 从零开始系列(外部设备片—MPU6050DMP驱动的移植)

    一.硬件准备             (1)开发板和软件参看 Nordic NRF51822 从零开始系列(一)开发环境的搭建             (2)mpu6050模块 二.前置知识     ...

  2. Beaglebone Black从零开始系列教程大汇总!

    谁都有做菜鸟的时候,菜鸟不可怕,怕的是没有人指引前进的方向!本系列文章将逐个阐述BBB各个功能模块的基本使用方法.现在中文的BBB资料太少,它们是本人从全世界互联网的各个角落收集.学习.亲自测试得到的 ...

  3. Nordic NRF51822 从零开始系列(一)开发环境的搭建

    硬件准备     (1)nrf51822 开发板一块(此处使用的是青云系列的,自带jlijnk ob+usb串口芯片)或者使用nrf51822模块+jlink_ob                 ( ...

  4. 从零开始系列-R语言基础学习笔记之二 数据结构(二)

    在上一篇中我们一起学习了R语言的数据结构第一部分:向量.数组和矩阵,这次我们开始学习R语言的数据结构第二部分:数据框.因子和列表. 一.数据框 类似于二维数组,但不同的列可以有不同的数据类型(每一列内 ...

  5. 从零开始系列--R语言基础学习笔记之一 环境搭建

    R是免费开源的软件,具有强大的数据处理和绘图等功能.下面是R开发环境的搭建过程. 一.点击网址 https://www.r-project.org/ ,进入"The R Project fo ...

  6. 从零开始系列之vue全家桶(6)实战前的设计

    搭建好基本框架后我们应该先想一想个人博客应该有哪些功能呢? 为了更好的适应企业的要求,这里我将搭建一个非典型的博客. 在全部采用单页开发的情况下,使用vue-router,路由分别设置home.abo ...

  7. 从零开始系列之vue全家桶(4)带新手小白一起搭建第一个个人网站项目

    未经允许,严禁转载,全文由blackchaos提供. 在安装好了前面大部分需要的插件,我们开始进行第一个个人项目.结合vue+vuex+vue-cli+vue-router+webpack使用. 1. ...

  8. 从零开始系列之vue全家桶(3)安装使用vuex

    什么是vuex? vuex:Vue提供的状态管理工具,用于同一管理我们项目中各种数据的交互和重用,存储我们需要用到数据对象. 即data中属性同时有一个或几个组件同时使用,就是data中共用的属性. ...

  9. 从零开始系列之vue全家桶(1)安装前期准备nodejs+cnpm+webpack+vue-cli+vue-router

    写在前面: 什么是全家桶? 包含了vue-router(http://router.vuejs.org),vuex(http://vuex.vuejs.org), vue-resource(https ...

  10. 从零开始系列之vue全家桶(2)安装调试插件vue Devtools

    小白安装前提是会用git,会从github上找东西. 第一步: 我们可以先从github上找到vue-devtools的项目,下载到本地.下载vue-devtools链接. 克隆方法:git clon ...

随机推荐

  1. java多线程回顾4:线程通信

    1.线程的协调运行 线程的协调运行有一个经典案例,即生产者和消费者问题. 假设有一个货架,生产者往货架上放货物,消费者从货架上取货物. 为了方便讲解,制定一个规则,生产者每放上一个货物,消费者就得取走 ...

  2. Cef 因系统时间不正常,导致页面访问空白问题

    当我们的系统时间不正常,比如设置一个日期-1999年9月9日,会引发证书问题. 系统时间不正常-IE有概率能访问 触发NavigateError事件,异常代码INET_E_INVALID_CERTIF ...

  3. nyoj 77-开灯问题 (倍数遍历)

    77-开灯问题 内存限制:64MB 时间限制:3000ms 特判: No 通过数:13 提交数:24 难度:1 题目描述: 有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍 ...

  4. VueJS学习之Vue-cli项目模板

    1. 首先是学习vue时需要依赖于node.js和webpack打包工具,具体的安装如下 http://nodejs.cn/download/下载安装nodejs,具体的安装步骤不在此赘述 2. 安装 ...

  5. three.js使用卷积法实现物体描边效果

    法线延展法 网上使用法线延展法实现物体描边效果的文章比较多,这里不再描述. 但是这种方法有个缺点:当两个面的法线夹角差别较大时,两个面的描边无法完美连接.如下图所示: 卷积法 这里使用另一种方法卷积法 ...

  6. mysql--时区表问题(Windows环境下)

    自己用Django开发个人博客是,数据库用的是mysql,期间遇到一个时间不一致的问题,具体解决过程: 1.问题原因:Windows没有时区表 2.去mysql官网下载相应版本的时区表:https:/ ...

  7. 继上篇-jquery ajax提交 本篇用ajax提交的数据去数据库查询

    上篇讲到如何用jquery ajax提交数据至后台,后台接收并返回给ajax.https://www.cnblogs.com/tiezhuxiong/p/11943328.html 今天我们把数据传到 ...

  8. 基于xtrabackup实现mysql备份还原

    简介 Xtrabackup2.2版之前包括4个可执行文件: innobackupex: Perl 脚本 xtrabackup: C/C++ 编译的二进制 xbstream: 支持并发写的流文件格式 x ...

  9. Android Saripaar 注解详解

    写这篇文章的原因 在移动端一般很少使用复杂的表单,一般针对于属性的更改都会打开一个新的页面进行更改.虽然不多,但是也会有.如果一个页面要输入的内容包括姓名.地址.邮箱.手机号等,对各个属性的验证会非常 ...

  10. Stack Overflow 上 370万浏览量的一个问题:如何比较 Java 的字符串?

    在逛 Stack Overflow 的时候,发现了一些访问量像喜马拉雅山一样高的问题,比如说这个:如何比较 Java 的字符串?访问量足足有 370万+,这不得了啊!说明有很多很多的程序员被这个问题困 ...