C语言扫盲篇
C语言扫盲篇
作者:尹正杰
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
一.什么是C语言
C 语言是一种通用的高级语言,最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的。C 语言最开始是于 1972 年在 DEC PDP-11 计算机上被首次实现。在 1978 年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)制作了 C 的第一个公开可用的描述,现在被称为 K&R 标准。
UNIX 操作系统,C编译器,和几乎所有的 UNIX 应用程序都是用 C 语言编写的。由于各种原因,C 语言现在已经成为一种广泛使用的专业语言。C语言具有以下特色:
1>.易于学习。
2>.结构化语言。
3>.它产生高效率的程序。
4>.它可以处理底层的活动。
5>.它可以在多种计算机平台上编译。
二.为什么要使用 C语言
一个 C 语言程序,可以是 3 行,也可以是数百万行,它可以写在一个或多个扩展名为 ".c" 的文本文件中,例如,hello.c。您可以使用 "vi"、"vim" 或任何其他文本编辑器来编写您的 C 语言程序。
1.C语言的应用场景
C 语言最初是用于系统开发工作,特别是组成操作系统的程序。由于 C 语言所产生的代码运行速度与汇编语言编写的代码运行速度几乎一样,所以采用 C 语言作为系统开发语言。下面列举几个使用 C 的实例:
a>.操作系统;
b>.语言编译器;
c>.汇编器;
d>.文本编辑器;
e>.打印机;
f>.网络驱动器;
g>.现代程序;
h>.数据库;
i>.语言解释器;
j>.实体工具;
2.C语言的风流史
a>.C 语言是为了编写 UNIX 操作系统而被发明的;
b>.C 语言是以 B 语言为基础的,B 语言大概是在 1970 年被引进的;
c>.C 语言标准是于 1988 年由美国国家标准协会(ANSI,全称 American National Standard Institute)制定的;
d>.截至 1973 年,UNIX 操作系统完全使用 C 语言编写;
e>.目前,C 语言是最广泛使用的系统程序设计语言;
f>.大多数先进的软件都是使用 C 语言实现的;
g>.当今最流行的 Linux 操作系统和 RDBMS(Relational Database Management System:关系数据库管理系统) MySQL 都是使用 C 语言编写的;
3.C11介绍
C11(也被称为C1X)指ISO标准ISO/IEC 9899:2011,是当前最新的C语言标准。在它之前的C语言标准为C99。存在以下新特性:
a>.对齐处理(Alignment)的标准化(包括_Alignas标志符,alignof运算符,aligned_alloc函数以及<stdalign.h>头文件)。
b>._Noreturn 函数标记,类似于 gcc 的 __attribute__((noreturn))。
c>._Generic 关键字。
    d>.多线程(Multithreading)支持,包括:_Thread_local存储类型标识符,<threads.h>头文件,里面包含了线程的创建和管理函数。
_Atomic类型修饰符和<stdatomic.h>头文件。
e>.增强的Unicode的支持。基于C Unicode技术报告ISO/IEC TR 19769:2004,增强了对Unicode的支持。包括为UTF-16/UTF-32编码增加了char16_t和char32_t数据类型,提供了包含unicode字符串转换函数的头文件<uchar.h>。
f>.删除了 gets() 函数,使用一个新的更安全的函数gets_s()替代。
g>.增加了边界检查函数接口,定义了新的安全的函数,例如 fopen_s(),strcat_s() 等等。
h>.增加了更多浮点处理宏(宏)。
i>.匿名结构体/联合体支持。这个在gcc早已存在,C11将其引入标准。
j>.静态断言(Static assertions),_Static_assert(),在解释 #if 和 #error 之后被处理。
k>.新的 fopen() 模式,("…x")。类似 POSIX 中的 O_CREAT|O_EXCL,在文件锁中比较常用。
l>.新增 quick_exit() 函数作为第三种终止程序的方式。当 exit()失败时可以做最少的清理工作。
三.各个操作系统安装C语言
1.windows
为了在 Windows 上安装 GCC,您需要安装 MinGW。为了安装 MinGW,请访问 MinGW 的主页 www.mingw.org,进入 MinGW 下载页面,下载最新版本的 MinGW 安装程序,命名格式为 MinGW-<version>.exe。
当安装 MinWG 时,您至少要安装 gcc-core、gcc-g++、binutils 和 MinGW runtime,但是一般情况下都会安装更多其他的项。添加您安装的 MinGW 的 bin 子目录到您的 PATH 环境变量中,这样您就可以在命令行中通过简单的名称来指定这些工具。当完成安装时,您可以从 Windows 命令行上运行 gcc、g++、ar、ranlib、dlltool 和其他一些 GNU 工具。
a>.点击“next”

b>.确认安装版本,点击“next”

c>.指定安装路径

d>.等待安装完毕

2.Linux安装方法
linux安装方式特别的简单。在命令行中键入“[root@yinzhengjie ~]# yum -y install make gcc gcc-c++”即可。然后验证是否安装成功:

3.mac os安装方式
如果您使用的是 Mac OS X,最快捷的获取 GCC 的方法是从苹果的网站上下载 Xcode 开发环境,并按照安装说明进行安装。一旦安装上 Xcode,您就能使用 GNU 编译器。Xcode 目前可从 developer.apple.com/technologies/tools/ 上下载。
4.安装操作环境安装方式
termux是 可以在Android操作系统中模拟Linux环境的终端应用程序,可以直接安装在无root权限的安卓环境下。自动地安装了一个最小的基本系统——可以使用类似Debian系统阵营中的APT包管理器提供额外的软件包。在Termux下可以直接安装 gcc 、Vim、nano、Python、w3m 甚至是 php + composer
在Termux中可以开启SSHD使用ssh客户端远程连接(包括在安卓本地使用类似ConnectBOT管理工具连接),可以做到和在类Unix系统中同样的使用gcc进行c语言文件的编译。Termux官网 : https://termux.com/
四.用C语言书写“Hello World”
[root@yinzhengjie c]# pwd
/yinzhengjie/c
[root@yinzhengjie c]# ll
总用量
-rw-r--r--+ root root 12月 : hello.c
[root@yinzhengjie c]# more hello.c
#include <stdio.h> int main()
{
/*我的第一个C程序*/
printf("My name is yinzhengjie! \n");
return ;
} /*接下来我们讲解一下上面这段程序:*/
/* 程序的第一行 #include <stdio.h> 是预处理器指令,告诉 C 编译器在实际编译之前要包含 stdio.h 文件。*/
/* 下一行 int main() 是主函数,程序从这里开始执行。*/
/* 下一行将会被编译器忽略,这里放置程序的注释内容。它们被称为程序的注释。*/
/* 下一行 printf(...) 是 C 中另一个可用的函数,会在屏幕上显示消息 "My name is yinzhengjie!"。*/
/* 下一行 return 0; 终止 main() 函数,并返回值 0。*/
[root@yinzhengjie c]#
[root@yinzhengjie c]# gcc hello.c #编译程序
[root@yinzhengjie c]# ll
总用量
-rwxr-xr-x+ root root 12月 : a.out #该文件是编译后新生成的哟!
-rw-r--r--+ root root 12月 : hello.c
[root@yinzhengjie c]# ./a.out #执行C程序。
My name is yinzhengjie!
[root@yinzhengjie c]#
[root@yinzhengjie c]#

C语言扫盲篇的更多相关文章
- 分布式协调服务Zookeeper扫盲篇
		分布式协调服务Zookeeper扫盲篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 身为运维工程师对kubernetes(k8s)可能比较熟,那么etcd(go语言实现)分布式协 ... 
- 高级Linux运维工程师必备技能(扫盲篇)
		高级Linux运维工程师必备技能(扫盲篇) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在了解文件系统之前,我们要学习一下磁盘存储数据的方式,大家都知道文件从内存若要持久化存储的 ... 
- Httpd服务入门知识-http协议版本,工作机制及http服务器应用扫盲篇
		Httpd服务入门知识-http协议版本,工作机制及http服务器应用扫盲篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Internet与中国 Internet最早来源于美 ... 
- MySQL数据库扫盲篇
		MySQL数据库扫盲篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL概述 1>.什么是MySQL MySQL是瑞典的MySQL AB公司开发的一个可用于各 ... 
- 转摘 MySQL扫盲篇
		一下文章摘自:http://www.jellythink.com/archives/636 MySQL扫盲篇 2014-09-15 分类:MySQL / 数据库 阅读(1412) 评论(1) 为什么 ... 
- 用Visual Studio Code Debug世界上最好的语言(Mac篇)
		用Visual Studio Code Debug世界上最好的语言(Mac篇) 首先,你要有台Macbook Pro,接着才继续看这个教程. PS:Windows用户看这里用Visual Studio ... 
- HTTP/2协议–特性扫盲篇
		HTTP/2协议–特性扫盲篇 随着web技术的飞速发展,1999年制定的HTTP 1.1已经无法满足大家对性能的要求,Google推出协议SPDY,旨在解决HTTP 1.1中广为人知的性能问题.SPD ... 
- C语言函数篇(二)函数参数基础设计
		形参实现一种数据传入的接口 ,由 实参 拷贝给 形参. 拷贝!!!!!!!!!!! 例1: void func(int tmp){ //意图是实现传进来的参数 +1 tmp++; } int mian ... 
- 01--Qt扫盲篇
		Qt扫盲篇 1.What is Qt 一个跨平台应用程序和UI开发框架,主要偏向于UI框架方面,由诺基亚公司开发维护. 使用 Qt 只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操 ... 
随机推荐
- 微服务监控zipkin、skywalking以及日志ELK监控系列
			0.整体架构 整体架构目录:ASP.NET Core分布式项目实战-目录 一.目录 1.zipkin监控 2.skywalking监控 3.ELK日志监控 asp.net Core 交流群:78746 ... 
- CodeFirst从零搭建ASP.NETCore2.0
			没时间介绍了,废话不说先上车 以下所有扯淡都是建立在.NETCore2.0环境已经搭建好 右键解决方案>新建项目> 选择Web>ASP.NETCoreWeb应用程序(.NET Cor ... 
- C#_Winform_聊天机器人
			最近研究微信公众平台,搭建了一个微信聊天机器人,调用小黄鸡的公众接口,实现在线和小黄鸡聊天的功能. 接口调用不是很麻烦,不过是php版本,所以研究了一下C#的功能模块, Winfrom版 using ... 
- (功能篇)回顾Bug管理系统Mantis优化改造经历
			共分为两篇,功能篇和技术篇. 时间大约是2016年冬天. 考虑搭一个用于Bug管理和追踪的系统. 综合比较下,选择了小巧的开源工具,Mantis. 在源码基础上,做代码修改,完成了定制版的优化改造. ... 
- 上云利器,K8S应用编排设计器之快到极致
			前言在前面的文章中,我们已经提到,华为云有一个上云利器:应用编排设计器.作为华为云应用编排服务与用户沟通的桥梁,设计器坚持用户体验至上的理念,以图形化方式,在鼠标点击之间,助力企业快速上云.优质的交互 ... 
- python 游戏(数字推理游戏Bagels)
			1.游戏思路和流程图 实现功能:玩家猜测三位不一样的数字,猜错了有提示,提示分别为(位置错误数字正确),(位置和数字正确),(数字和位置都不正确) 游戏流程图 2. 使用模块和游戏提示 import ... 
- asp.net 网页拉伸 到300%不变形方法一
			网页拉伸到300%控件和表格不会出现太大变形 方法: 1.对主页面采用百分比宽度(Width="100%") 2.对于表格使用百分比宽度,包括表格宽度和表格中顶端td宽度 3.对t ... 
- SDN竞赛思考总结
			SDN竞赛思考总结 2016年下半年张老师开始着手组建SDN小组,从未接触过任何网络知识的我也有幸成为小组一员.从最开始刷Openflow交换机,Get了刷交换机的新技能;到P4FPGA的无疾而终,表 ... 
- 个人作业3——个人总结AlPha阶段
			一.Alpha版本的总结 1.感受 Alpha版本已经结束了,回顾整个过程,我最大的遗憾就是项目完成得不是很理想,同时觉得自己做得不够多.不够好. 2.我做了哪些工作 数据库的连接,部分团队博客:部分 ... 
- 数据平面可编程与SDN关系理解,以及数据平面可编程的理解
			数据平面可编程与SDN关系 狭义 广义 数据平面可编程的理解 狭义 广义 
