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系统开发技巧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/948281.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

lec7-路由与路由器

lec7-路由与路由器 1. 路由器硬件 路由器的硬件部分&#xff1a; 断电失去&#xff1a; RAM断电不失去&#xff1a;NVRAM&#xff0c; Flash&#xff0c; ROMinterface也算是一部分 路由器是特殊组件的计算机 console 口进行具体的调试 辅助口&#xff08;Auxiliary&…

spring防止重复点击,两种注解实现(AOP)

第一种&#xff1a;EasyLock 简介 为了简化可复用注解&#xff0c;自己实现的注解&#xff0c;代码简单随拿随用 使用方式 1.创建一个注解 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface EasyLock {long waitTime() default …

Linux-Ubuntu之I2C通信

Linux-Ubuntu之I2C通信 一&#xff0c;I2C通信原理1.写时序2.读时序 二&#xff0c;代码实现三&#xff0c;显示 一&#xff0c;I2C通信原理 使用I2C接口驱动AP3216C传感器&#xff0c;该传感器能实现两个效果&#xff0c;一个是感应光强&#xff0c;另一个是探测物体与传感器…

音视频入门基础:MPEG2-PS专题(4)——FFmpeg源码中,判断某文件是否为PS文件的实现

一、引言 通过FFmpeg命令&#xff1a; ./ffmpeg -i XXX.ps 可以判断出某个文件是否为PS文件&#xff1a; 所以FFmpeg是怎样判断出某个文件是否为PS文件呢&#xff1f;它内部其实是通过mpegps_probe函数来判断的。从《FFmpeg源码&#xff1a;av_probe_input_format3函数和AVI…

框架模块说明 #09 日志模块_01

背景 日志模块是系统的重要组成部分&#xff0c;主要负责记录系统运行状态和定位错误问题的功能。通常&#xff0c;日志分为系统日志、操作日志和安全日志三类。虽然分布式数据平台是当前微服务架构中的重要部分&#xff0c;但本文的重点并不在此&#xff0c;而是聚焦于自定义…

【数据仓库】hadoop3.3.6 安装配置

文章目录 概述下载解压安装伪分布式模式配置hdfs配置hadoop-env.shssh免密登录模式设置初始化HDFS启动hdfs配置yarn启动yarn 概述 该文档是基于hadoop3.2.2版本升级到hadoop3.3.6版本&#xff0c;所以有些配置&#xff0c;是可以不用做的&#xff0c;下面仅记录新增操作&#…

算法题(25):只出现一次的数字(三)

审题&#xff1a; 该题中有两个元素只出现一次并且其他元素都出现两次&#xff0c;需要返回这两个只出现一次的数&#xff0c;并且不要求返回顺序 思路: 由于对空间复杂度有要求&#xff0c;我们这里不考虑哈希表。我们采用位运算的方法解题 方法&#xff1a;位运算 首先&#…

将机器学习预测模型融入AI agent的尝试(一)

将机器学习临床预测模型融入AI agent的尝试&#xff08;一&#xff09; 我主要是使用机器学习制作临床预测模型和相关的应用&#xff0c;最近考虑的事情是自己之前的的工作能不能和AI agent进行融合&#xff0c;将AI 对自然语言理解能力和预测模型的预测能力结合在一起&#x…

51单片机——按键实验

由于机械点的弹性作用&#xff0c;按键开关在闭合时不会马上稳定的接通&#xff0c;在断开时也不会一下子断开&#xff0c;因而在闭合和断开的瞬间均伴随着一连串的抖动。抖动时间的长短由按键的机械特性决定的&#xff0c;一般为 5ms 到 10ms&#xff0c;为了确保 CPU 对按键的…

电子邮件对网络安全的需求

&#xff08; 1&#xff09;机密性&#xff1a;传输过程中不被第三方阅读到邮件内容&#xff0c;只有真正的接收方才可以阅读邮件。&#xff08; 1.5 分&#xff09; &#xff08; 2&#xff09;完整性&#xff1a;支持在邮件传输过程中不被篡改&#xff0c;若发生篡改&#…

vue路由模式面试题

vue路由模式 1.路由的模式有哪些?有什么区别? history和hash模式 区别: 1.表现的形态不同: 在地址栏url中:hash模式中带有**#**号,history没有 2.请求错误时表现不同: 在hash模式中,对于404地址请求时,不会进行请求 但是在history模式中,对于404请求时,仍然会进行请求…

电子应用设计方案86:智能 AI背景墙系统设计

智能 AI 背景墙系统设计 一、引言 智能 AI 背景墙系统旨在为用户创造一个动态、个性化且具有交互性的空间装饰体验&#xff0c;通过融合先进的技术和创意设计&#xff0c;提升室内环境的美观度和功能性。 二、系统概述 1. 系统目标 - 提供多种主题和风格的背景墙显示效果&…

Python爬虫 - 豆瓣图书数据爬取、处理与存储

文章目录 前言一、使用版本二、需求分析1. 分析要爬取的内容1.1 分析要爬取的单个图书信息1.2 爬取步骤1.2.1 爬取豆瓣图书标签分类页面1.2.2 爬取分类页面1.2.3 爬取单个图书页面 1.3 内容所在的标签定位 2. 数据用途2.1 基础分析2.2 高级分析 3. 应对反爬机制的策略3.1 使用 …

西安电子科技大学初/复试笔试、面试、机试成绩占比

西安电子科技大学初/复试笔试、面试、机试成绩占比 01通信工程学院 02电子工程学院 03计算机科学与技术学院 04机电工程学院 06经济与管理学院 07数学与统计学院 08人文学院 09外国语学院 12生命科学与技术学院 13空间科学与技术学院 14先进材料与纳米科技学院 15网络与信息安…

多模态论文笔记——CogVLM和CogVLM2(副)

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍多模态模型的LoRA版本——CogVLM和CogVLM2。在SD 3中使用其作为captioner基准模型的原因和优势。 文章目录 CogVLM论文背景VLMs 的任务与挑战现有方法及…

智慧工地信息管理与智能预警平台

建设背景与政策导向 智慧工地信息管理与智能预警平台的出现&#xff0c;源于工地管理面临的诸多挑战&#xff0c;如施工地点分散、危险区域多、监控手段落后等。随着政府对建筑产业现代化的积极推动&#xff0c;各地纷纷出台政策支持智慧工地的发展&#xff0c;旨在通过信息技…

【从零开始入门unity游戏开发之——C#篇42】C#补充知识——随机数(Random)、多种方法实现string字符串拼接、语句的简写

文章目录 一、随机数1、Random.Next()生成随机整数示例&#xff1a;生成一个随机整数生成指定范围内的随机整数 2、Random.NextSingle生成随机浮点数示例&#xff1a;生成随机浮点数 3、 生成随机字母或字符示例&#xff1a;生成随机字母示例&#xff1a;生成随机小写字母 二、…

「Mac畅玩鸿蒙与硬件54」UI互动应用篇31 - 滑动解锁屏幕功能

本篇教程将实现滑动解锁屏幕功能&#xff0c;通过 Slider 组件实现滑动操作&#xff0c;学习事件监听、状态更新和交互逻辑的实现方法。 关键词 滑动解锁UI交互状态管理动态更新事件监听 一、功能说明 滑动解锁屏幕功能包含以下功能&#xff1a; 滑动解锁区域&#xff1a;用…

VScode SSH 错误:Got bad result from install script 解決

之前vscode好好的&#xff0c;某天突然连接报错如下 尝试1. 服务器没有断开,ssh可以正常连接 2. 用管理员权限运行vscode&#xff0c;无效 3. 删除服务器上的~/.vscode-server 文件夹&#xff0c;无效 试过很多后&#xff0c;原来很可能是前一天anaconda卸载导致注册表项 步…

[论文笔记]Representation Learning with Contrastive Predictive Coding

引言 今天带来论文 Representation Learning with Contrastive Predictive Coding的笔记。 提出了一种通用的无监督学习方法从高维数据中提取有用表示&#xff0c;称为对比预测编码(Contrastive Predictive Coding,CPC)。使用了一种概率对比损失&#xff0c; 通过使用负采样使…