今天开始写下一系列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. 网站搭建-2-本地网站搭建-安装Linux虚拟机/ 安装IIS Windows

    搭建网站-1-域名申请参见公众号 生物信息系统(swxxxt) 首先,已经拥有了一个可以正常使用的域名. 之前买了两年的阿里的服务器,由于是Windows的,最后不了了之了(因为当时找的代码都是lin ...

  2. 关于IP网段划分

    IP地址分类(A类 B类 C类 D类 E类)     IP地址由四段组成,每个字段是一个字节,8位,最大值是255,, IP地址由两部分组成,即网络地址和主机地址.网络地址表示其属于互联网的哪一个网络 ...

  3. 如何使用Sping Data JPA更新局部字段

    问题描述 在更新数据时,有时候我们只需要更新一部分字段,其他字段保持不变.Spring Data JPA并未提供现成的接口,直接使用save()更新会导致其他字段被Null覆盖掉. 解决办法 通常有两 ...

  4. JavaScript中解析JSON --- json.js 、 json2.js 以及 json3.js的使用区别

    JSON官方(http://www.json.org/)提供了一个json.js,json.js是JSON官方提供的在JavaScript中解析JSON的js包,json.js.json2.js.js ...

  5. flex一些属性

    // 改变主轴的方向 flex-direction: column; // display:flex的子元素无法设置宽度 // 子元素有个flex-shrink属性,表示在父元素宽度不够的情况下是否自 ...

  6. [FPGA]浅谈LCD1602字符型液晶显示器(Verilog)

    目录 概述 LCD1602 LCD1602是什么? LCD1602的管脚 RS_数据/命令选择 E_使能 D0-D7 LCD1602有个DDRAM LCD1602还有个CGROM 指令集 清屏 进入模 ...

  7. 【集训Day1 测试】选择课题

    选择课题(bestproject) [问题描述] Robin 要在下个月交给老师 n 篇论文,论文的内容可以从 m 个课题中选择.由于课题数有限,Robin 不得不重复选择一些课题.完成不同课题的论文 ...

  8. Sublime Text最好的中文教程

    原文链接:http://lucida.me/blog/sublime-text-complete-guide/ 摘要(Abstract) 本文系统全面的介绍了Sublime Text,旨在成为最优秀的 ...

  9. WPF 因设置不期望的DataContext,导致的绑定异常

    在MainWindow中,创建一个背景属性BrushTest,并将其绑定至界面 <Window x:Class="WpfApp8.MainWindow" xmlns=&quo ...

  10. Gitlab用户信息批量导出

    前言 因运维体系中涉及到用户权限管理及统计,需将Gitlab用户数据提取出来并录入到公司内部自建的权限统计平台. 本文将对Gitlab的用户信息数据批量导出进行操作说明! 思路 A)要对数据进行批量的 ...