当前位置: 首页 > article >正文

1.C语言教程:历史、特点、版本与入门示例

目录

    • 1.历史
    • 2.特点
    • 3.版本
    • 4.编译
    • 5.Hello World 示例

1.历史

本篇原文为:C语言教程:历史、特点、版本与入门示例。

更多C++进阶、rust、python、逆向等等教程,可去此站查看:酷程网

C 语言的诞生源于 Unix 系统的开发需求。

1969 年,美国贝尔实验室的肯·汤普森(Ken Thompson)和丹尼斯·里奇(Dennis Ritchie)共同开发了 Unix 操作系统。

但由于 Unix 是用汇编语言编写的,不同类型的计算机所使用的汇编语言并不完全相同,这使得它无法在其他计算机上运行。

因此他们决定用一种高级语言重写系统,但当时的高级语言无法满足他们的需求,因此汤普森基于 BCPL 语言创造了 B 语言。

1972 年,丹尼斯·里奇和布莱恩·柯林汉(Brian Kernighan)在 B 语言的基础上重新设计了一种新语言,这便是 C 语言。1973 年,整个 Unix 系统被成功重写为 C 语言,随后,这种语言迅速传播并广泛应用于各类操作系统和系统软件的开发。

1988 年,美国国家标准协会(ANSI)正式将 C 语言标准化,这标志着 C 语言的稳定与规范化。

如今,C 语言依然是最为广泛使用和流行的系统编程语言之一,Unix 和 Linux 系统仍然依赖 C 语言进行开发。

2.特点

C 语言的持久生命力与广泛应用主要源于其显著的特点。

(1)低级语言

C 语言能直接操作硬件,进行内存管理,并与操作系统进行对话,因此被认为是一种接近底层的低级语言。这使其非常适合于编写需要与硬件交互或具有极高性能要求的程序。

(2)可移植性

C 语言的初衷是将 Unix 系统移植到其他计算机架构,这使得它在设计上极为注重可移植性。C 程序可以相对轻松地在各种硬件架构和操作系统之间移植。

不仅如此,C 语言还是嵌入式系统的首选语言,许多汽车、照相机及家电等设备的底层系统均使用 C 语言,这也得益于其良好的可移植性。

(3)简单性

C 语言的语法相对简洁,语法规则不多,几乎没有语法糖。一般来说,如果有两个语法能够完成类似的功能,C 语言只会提供其中一种,这大大降低了语言的复杂性。

同时,C 语言不提供复杂的数据结构,例如没有“类”(class),程序员需要自己构建复杂数据结构。

(4)灵活性

C 语言对程序员几乎没有限制,假设程序员知道自己在做什么,因此不限制潜在的危险操作,后果由程序员自负。

C 语言的哲学是“信任程序员,不要妨碍他们”。例如,C 语言允许程序员自行管理内存,而不提供内存自动清理的功能,也没有类型检查、数组负索引检查和指针位置检查等保护措施。

这种自由虽看似危险,但却为高级程序员提供了更大的编程灵活性。然而,这也使得 C 语言的调试变得更加困难。

上述特点使得 C 语言能编写出性能卓越、充分发挥硬件潜力的程序。此外,C 语言的编译器实现难度相对较低,但同时也意味着代码易出错,一般程序员不易编写出高质量代码。

值得注意的是,许多现代流行编程语言如 C++、Java、C# 和 JavaScript 等,都是以 C 语言为基础的,因此掌握 C 语言有助于加深对这些语言的理解。

3.版本

C 语言历史上经历了多个版本的发展。

(1)K&R C

K&R C 指的是 C 语言的原始版本。1978 年,C 语言的发明者丹尼斯·里奇(Dennis Ritchie)和布莱恩·柯林汉(Brian Kernighan)共同撰写了著名教材《C 编程语言》(The C Programming Language)。由于当时 C 语言尚无正式的语法标准,这本书便成为了公认的标准,以两位作者的姓氏首字母命名为“K&R C”。

(2)ANSI C(又称 C89 或 C90)

原始版本的 C 语言相对简单,对许多情况的描述模糊,加之语法仍在快速发展,因此对标准化的呼声日益高涨。1989 年,美国国家标准协会(ANSI)制定了一套 C 语言标准,1990 年国际标准化组织(ISO)通过了这一标准,称为“ANSI C”,也可以根据发布年份称为“C89”或“C90”。

(3)C95

1995 年,ANSI 对 C89 标准进行了补充,增加了对多字节字符和宽字符的支持,这个版本被称为 C95。

(4)C99

C 语言标准的首次重大修订发生在 1999 年,新增了许多语言特性,如双斜杠(//)注释语法。这个版本被称为 C99,目前是使用最广泛的 C 语言版本。

(5)C11

2011 年,标准化组织再次对 C 语言进行修订,增加了 Unicode 和多线程支持,这个版本称为 C11,同样使用广泛。

(6)C17

C11 标准于 2017 年进行了修补,尽管发布在 2018 年,此版本只解决了 C11 的一些缺陷,没有引入新功能,被称为 C17。

(7)C23

C标准化组织在 2024 年通过C23版本,新增更多功能:C23 (C语言标准)

4.编译

C 语言是一种编译型语言,源代码存储为文本文件,无法直接执行。必须通过编译器生成二进制可执行文件后才能运行。

编译器将代码从文本翻译为二进制指令的过程称为编译阶段,亦称“编译时”,与运行阶段(或“运行时”)相区分。

目前,最常用的 C 语言编译器是自由软件基金会推出的 GCC 编译器,用户可以免费使用,但其主要用于linux系统。

像我们平时大多数人使用的都是WIndows系统,想要开发C语言程序,最佳方式是按照Visual Studio,其内已经内置了C++语言编译器,由于C++完全兼容C语言,因此可以直接使用。

使用方式可以参考文章:初识C++

如果你就是想要在windows系统上使用linux系统编译环境,那么最佳方案是安装wsl使用:Linux系统入门。

此外,网上也提供了多种在线编译器,方便用户直接在网页上模拟运行 C 代码并查看结果,以下是两个示例:

  • CodingGround
  • OnlineGDB
  • C 在线工具

5.Hello World 示例

C 语言的源代码文件通常以 .c 结尾。下面是一个简单的 C 程序 hello.c,它是一个普通的文本文件,任何文本编辑器都可以用来编写,比如linux下的vim编辑器,window下的记事本。

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

上述程序的唯一作用是在屏幕上显示“Hello World”。

这里不对代码的含义进行解释,仅作为一个示例,让大家了解如何编译和运行 C 代码。

如果你已经安装好了linux系统的GCC 编译器,可以打开命令行并执行以下命令:

gcc hello.c

该命令使用 gcc 编译器将源文件 hello.c 编译成二进制代码。

运行此命令后,默认会在当前目录下生成一个编译产物文件 a.out(在 Windows 平台上为 a.exe)。执行该文件即可在屏幕上输出 Hello World

GCC 的 -o 参数(output 的缩写)可以用于指定编译产物的文件名。

gcc -o hello hello.c

此命令中的 -o hello 指定了编译产物的文件名为 hello(取代默认的 a.out)。编译后生成的可执行文件名为 hello,执行该文件也会得到相同的结果。

GCC 的 -std= 参数(standard 的缩写)可以指定编译时使用的 C 语言标准。

gcc -std=c99 hello.c

此命令指定按照 C99 标准进行编译。

注意,-std 后面需要用 = 连接参数,而不是像 -o 那样用空格,并且 = 前后也不能有多余的空格。

但如果你仅仅只想学习一下C语言的语法,那么不必执行前述这些东西,直接去在线编译网站即可:

image.png

但如果可以,我还是推荐你使用visual studio工具进行学习,因为它拥有智能提示、补全功能。

或者安装使用wsl,提前适应linux系统开发技巧。


http://www.kler.cn/a/467410.html

相关文章:

  • 【计算机网络】什么是AC和AP?
  • [paddle] 非线性拟合问题的训练
  • AI在电子制造中的应用:预测质量控制
  • java.lang.Error: FFmpegKit failed to start on brand:
  • java项目之校园管理系统的设计与实现(源码+文档)
  • 力扣hot100——栈
  • Tableau数据可视化与仪表盘搭建-安装教程
  • 探寻AI Agent:开启知识图谱自动生成新篇章(17/30)
  • SpringBoot入门之创建一个Hello World项目
  • Tesseract5.4.0自定义LSTM训练
  • 互联网直播点播平台EasyDSS无人机视频推拉流技术实现工地远程监控巡检直播
  • CAN201 Introduction to Networking(计算机网络)Pt.4 链路层
  • Nginx:负载均衡
  • Qt6.8.1 Mingw13.1 编译opencv4.10时cannot convert ‘char*‘ to ‘LPWSTR
  • Day27:for-in语句
  • Maven 入门指南:从零开始掌握 Maven
  • 电子电气架构 --- 中央HPC架构
  • 结合梯度信息来改进爬山算法
  • Fabric部署-docker-compose安装
  • 2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(三级)答案 + 解析
  • 力扣-数据结构-12【算法学习day.83】
  • C#多线程精解
  • 第4天:Web应用蜜罐系统堡垒机运维API内外接口第三方拓展架构部署影响
  • Tortoisegit 安装之后没有Add、ignore解决
  • 最小二乘有限差分的物理信息神经网络与物理信息神经网络的区别
  • 升级Cypress到10.8.0