今天开始写下一系列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. mysql去重查询表中数据

    1.distinct select count(distinct CName) from teble select count(CName) from (select distinct CName f ...

  2. [UWP]通过自定义XamlCompositionBrushBase实现图片平铺

    1. 什么是XamlCompositionBrushBase 我早就想试试自定义XamlCompositionBrushBase,但一直没机会.上一篇文章介绍到使用Win2D的BorderEffect ...

  3. 领扣(LeetCode)单词模式 个人题解

    给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式. 这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向 ...

  4. 为React绑定事件,并修改state中的值

    import React from 'react' export default class ClickS extends React.Component { constructor () { sup ...

  5. selenium针对浏览器滚动条的操作

    我们在实际自动化测试过程中,肯定会遇到当前页面显示不到我们定位的元素.这就需要下拉滚动条才能显示出我们的元素: 而滚动条的按钮又是我们定位不到的,所以需要使用js脚本来完成: 1.先来说我们的下拉滚动 ...

  6. SCAU1143 多少个Fibonacci数--大菲波数【杭电-HDOJ-1715】--高精度加法--Fibonacci数---大数比较

    /*******对读者说(哈哈如果有人看的话23333)哈哈大杰是华农的19级软件工程新手,才疏学浅但是秉着校科联的那句“主动才会有故事”还是大胆的做了一下建一个卑微博客的尝试,想法自己之后学到东西都 ...

  7. PostGIS 使用Mysql_fdw同步ArcGIS填坑记录

    ##实现Mysql_fdw数据同步过程中,出现过很多坑,开此贴记录一下 1.触发器记录 这里insert的时候,采用过insert into f_pressureline select new.*,出 ...

  8. AppBoxFuture: 集成第三方Sql数据库

      框架设计之初是不准备支持第三方数据库的,但最近几个朋友都提到需要将旧的基于传统Sql数据库的应用迁移到框架内,主要是考虑到一方面目前框架内置的分布式数据库尚未完善,另一方面是希望能逐步迭代旧应用替 ...

  9. js 根据指定的多个索引,删除相应的数组元素。splice + sort

    更新于2018-04-19 var productItems = ["a", "b", "c", "d"]; var i ...

  10. /etc/security/limits.conf配置文件详解

    这个文件主要是用来限制用户对系统资源的使用.是/lib64/security/pam_limits.so模块对应的/etc/serurity/pam_limits的配置文件. # /etc/secur ...