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

C语言学习系列:初识C语言

前言,C语言是什么

语言,比如中文、英语、法语、德语等,是人与人交流的工具。

C语言也是语言,不过是一种特殊的语言,是人与计算机交流的工具

为什么叫C语言呢

这就要从C语言的历史说起了。

一,C语言的前世今生

计算机的世界是二进制的世界,这是学习计算机必须具备的常识,现实世界中的数据之所以能被计算机处理,是因为:

  • 输入到计算机的数据会被转换为二进制
  • 数据在计算机中以二进制的形式存储
  • 数据在计算机中以二进制的形式参与计算

计算机发明伊始,科学家们直接使用二进制编写的程序与计算机交流,二进制语言称之为机器语言

机器语言太难理解、记忆、维护,于是科学家们发明了助记符,编写程序时使用特定的人类语言,交给计算机执行前将程序转换为机器语言,这个过程称为编译,采用助记符的语言称之为汇编语言

汇编语言是一种低级语言,所谓低级是指和硬件关联特别是与CPU指令集关联密切,不同的CPU架构有不同的指令集,可以理解为不同的CPU架构有不同的汇编语言,这就导致一个问题,汇编语言编写的程序不具备通用性,ARM架构的程序不能直接在AMD架构运行。

开发一种屏蔽底层硬件差异的语言提上了科学家的日程,这种语言称之为高级语言高级是指语言远离了硬件,更接近人类语言。

1969年,美国贝尔实验室的肯·汤普森(Ken Thompson)与丹尼斯·里奇(Dennis Ritchie)一起开发了 Unix 操作系统。Unix 是用汇编语言写的,无法移植到其他计算机,他们决定使用高级语言重写。但是,当时的高级语言无法满足他们的要求,汤普森就在 BCPL 语言的基础上发明了 B 语言

1972年,丹尼斯·里奇和布莱恩·柯林汉(Brian Kernighan)又在 B 语言的基础上重新设计了一种新语言,这种新语言取代了 B 语言,所以称为 C 语言。这就是C语言名称的来历。

1973年,整个 Unix 系统都使用 C 语言重写。此后,这种语言开始快速流传,广泛用于各种操作系统和系统软件的开发。

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

几十年后的今天,C 语言依然是最广泛使用、最流行的系统编程语言之一,Unix 和 Linux 系统现在还是使用 C 语言开发。

二,C语言的特点

C语言的特点主要包括以下几点:

1,简洁性和灵活性:C语言设计得非常简洁,仅有大约32个关键字和一套有限的控制结构,这使得它易于学习和使用。同时,它提供了很高的灵活性,允许程序员直接控制硬件资源。

2,高级与低级特性的结合:C语言结合了高级语言的结构化特性(如函数、数组、指针)与低级语言的特性(如直接内存访问),使得它既能进行高层的抽象编程,也能进行底层的系统编程。

3,结构化编程:C语言支持结构化编程范式,通过函数来组织代码,使程序易于理解、修改和维护。它提供了结构化的控制语句,如if-else、while、for循环等,有助于编写清晰的逻辑流程。

4,丰富的数据类型:C语言支持多种数据类型,包括基本类型(如整型、浮点型、字符型)、构造类型(数组、结构体、共用体)、指针类型等,以及后来标准中添加的布尔类型、枚举类型等,能够满足复杂数据结构的需求。

5,运算符和表达式的多样性:C语言有34种运算符,涵盖了算术、关系、逻辑、位操作等多种运算,支持丰富的表达式组合,增强了代码的表达力和效率。

6,直接访问硬件:通过指针,C语言允许直接访问内存地址,这对于系统编程和硬件操控非常关键,但同时也增加了程序潜在的风险,如内存泄漏和指针错误。

7,可移植性:虽然C语言与特定的机器架构紧密相关,但通过遵循标准(如ANSI C或ISO C),编写的代码能够在不同平台上编译和运行,具有一定的可移植性。

8,编译型语言:C语言是编译型语言,源代码需要通过编译器转换成机器代码,然后才能在目标机器上运行,这通常意味着执行效率较高。

9,广泛应用:由于其高效性和灵活性,C语言被广泛应用于操作系统、嵌入式系统、设备驱动程序、游戏引擎、数据库等领域。

10,高效性:C语言生成的目标代码通常较小且执行效率高,适合对性能要求严格的应用场景。

三,C语言的里程碑

C语言自20世纪70年代初诞生以来,经历了多个重要发展里程碑,这些里程碑不仅见证了C语言本身的演进,也深刻影响了整个软件开发领域。以下是C语言发展的一些关键节点:

1,起源(1969-1972):C语言的前身可以追溯到贝尔实验室的BCPL(Basic Combined Programming Language)语言,由Martin Richards开发。BCPL启发了B语言的创造,由Ken Thompson在1970年设计,用于编写UNIX操作系统。Dennis Ritchie随后在此基础上开发了C语言,最初是为了重新实现UNIX操作系统。

2, 第一个C编译器(1972):Dennis Ritchie编写了第一个C编译器,该编译器是用汇编语言编写的。这个早期版本的C语言主要用于内部项目,如UNIX系统的重写。

3,K&R C(1978):Brian Kernighan和Dennis Ritchie合著的《The C Programming Language》(通常称为K&R C)出版,这本书成为C语言的非正式标准,极大地推动了C语言的普及。该书首次全面介绍了C语言的语法和使用方法。

4,ANSI C(1983-1989):随着C语言的广泛应用,美国国家标准协会(ANSI)成立了一个委员会来制定C语言的标准。1983年开始工作,1989年正式发布了ANSI X3.159-1989,即ANSI C标准,也称为C89。这个标准定义了C语言的语法、库函数和其他特性,提高了不同编译器之间的兼容性。

5,ISO C(1990):国际标准化组织(ISO)采纳了ANSI C标准,并发布为ISO/IEC 9899:1990,通常称为C90。C90成为了全球认可的C语言国际标准。

6,C99(1999):ISO发布了C语言的第二个主要修订版,ISO/IEC 9899:1999,简称C99。这一版本引入了许多新特性,包括更灵活的数组初始化、变量声明的位置、新的数据类型(如_Bool)、以及对复数的支持等。

7,C11(2011):ISO发布了C语言的第三个重大修订,ISO/IEC 9899:2011,即C11。C11增加了多线程支持、静态断言、匿名结构体和联合体、alignas关键字等新特性,并且对Unicode支持进行了改进。

8,C17/C18(2018):虽然没有引入太多新功能,ISO发布了C语言的一个小更新ISO/IEC 9899:2018,有时称为C17或C18,主要目的是修正C11中的错误并澄清一些规定,提高了标准的清晰度和一致性。

四,C语言的编译

C 语言是一种编译型语言,源码都是文本文件,本身无法执行。必须通过编译器,生成二进制的可执行文件,才能执行。

编译器将代码从文本翻译成二进制指令的过程,就称为编译阶段,又称为“编译时”(compile time),跟运行阶段(又称为“运行时”)相区分。

目前,最常见的 C 语言编译器是自由软件基金会推出的 GCC 编译器,它可以免费使用。Linux 和 Mac 系统可以直接安装 GCC,Windows 系统可以安装 MinGW。

不过,初学者可以使用在线编译器,直接在网页上模拟运行C代码、查看结果,推荐使用下面两个在线工具:

  • CodingGround:https://tutorialspoint.com/compile_c_online.php
  • OnlineGDB: https://onlinegdb.com/online_c_compiler

在这里插入图片描述

五,我的第一个C程序

C 语言的源代码文件,通常以后缀名.c结尾。

1,编写源码

下面是一个简单的 C 程序hello.c,它是一个普通的文本文件,任何文本编译器都能用来写。

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

上面这个程序作用仅仅是在屏幕上面显示“Hello World”。

2,编译

假设你已经安装好了 GCC 编译器,可以打开命令行,执行下面的命令:

gcc hello.c

在这里插入图片描述

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

运行这个命令以后,默认会在当前目录下生成一个编译结果文件a.out(assembler output 的缩写,Windows 平台为a.exe)。
在这里插入图片描述

此外,编译时可以通过GCC 的-o参数(output 的缩写)指定编译生成的文件名:

gcc -o hello hello.c

在这里插入图片描述

上面命令的-o hello指定编译生存的文件名为hello(取代默认的a.out)。编译后就会生成一个名叫hello的可执行文件,相当于为a.out指定了名称。

3,运行

运行第2步编译生成的文件,就会在屏幕上输出Hello World:

./a.out

如果编译时通过-o指定了编译生成的结果的文件名为hello,则执行如下命令:

./hello

如果是windows,执行如下命令:

hello.exe

在这里插入图片描述

运行程序时,可以通过GCC 的-std=参数(standard 的缩写)指定按照哪个 C 语言的标准进行编译:

gcc -std=c99 hello.c

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

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

六,C语言的核心知识点

很多人说C语言很难,但是大家要知道的是C语言难在工程实践,C语言学起来并不难,其核心知识点如下:

  • ①数据类型
  • ②运算符和表达式
  • ③输入和输出
  • ④流程控制
  • ⑤函数
  • ⑥数组
  • ⑦指针
  • ⑧结构体
  • ⑨文件操作
  • ⑩内存管理

细化版:

在这里插入图片描述

相关文章:

C语言学习系列:初识C语言

前言&#xff0c;C语言是什么 语言&#xff0c;比如中文、英语、法语、德语等&#xff0c;是人与人交流的工具。 C语言也是语言&#xff0c;不过是一种特殊的语言&#xff0c;是人与计算机交流的工具。 为什么叫C语言呢&#xff1f; 这就要从C语言的历史说起了。 一&#…...

利用反向代理编写HTTP抓包工具——可视化界面

手写HTTP抓包工具——可视化界面 项目描述语言golang可视化fynev2功能代理抓包、重发、记录 目录 1. 示例1.1 主界面1.2 开启反向代理1.3 抓包1.4 历史记录1.5 重发 2. 核心代码2.1 GUI2.1 抓包 3. 结语3.1 传送门 1. 示例 1.1 主界面 1.2 开启反向代理 1.3 抓包 1.4 历史记录…...

下拉框数据被遮挡 且 后续数据无法下拉的 解决方法

目录 前言1. 问题所示2. 原理分析3. 解决方法3.1 添加空白版2.2 调整z-index2.3 父容器的溢出属性2.4 调整样式属性4. 效果图前言 小程序使用的是Uniapp,原理都差不多,索性标题就不标注Uniapp(小程序) 对于该问题调试了一个晚上,最终解决,对此记录下来 1. 问题所示 执…...

课设--学生成绩管理系统(二)

欢迎来到 Papicatch的博客 目录 &#x1f40b;引言 &#x1f988;编写目的 &#x1f988;项目说明 &#x1f40b;产品介绍 &#x1f988;产品概要说明 &#x1f988;产品用户定位 &#x1f988;产品中的角色 &#x1f40b; 产品总体业务流程图 &#x1f40b; 产品功…...

STM32CubeMX配置-外部中断配置

一、简介 MCU为STM32G070&#xff0c;配置为上升沿触发外部中断&#xff0c;在上升沿外部中断回调函数中进行相关操作。 二、外部中断配置 查看规格书中管教描述&#xff0c;找到I/O对应的外部中断线&#xff0c;然后进行如下上升沿触发外部中断配置。 三、生成代码 调用上升沿…...

基于Vue的日程排班表 - common-schedule

原文&#xff1a;基于Vue的日程排班表 - common-schedule-CSDN博客...

SmartEDA、Multisim、Proteus大比拼:电路设计王者之争?

在电路设计领域&#xff0c;SmartEDA、Multisim和Proteus无疑是三款备受瞩目的软件工具。它们各自拥有独特的功能和优势&#xff0c;但在这场电路设计王者的竞争中&#xff0c;谁才是真正的领跑者&#xff1f;让我们深入探究这三款软件的异同&#xff0c;揭示它们各自的魅力所在…...

【教资科一传统文化】文化素养传统文化之神话传说、天文历法、古代称谓、中国传统节日、成语典故

目录 ​编辑 传统文化之天文历法 (一)四时(四季)从农历、名称上掌握 (二)二十四节气&#xff08;1、名称2、季节-节气3、特殊&#xff09; (三)十二时辰&#xff08;1.先后顺序2.时间段3.别称&#xff09; (四)五更(五夜) (五)天干地支(1.名称2.纪年) ​文化素养传统文化…...

Apache Pulsar 从入门到精通

一、快速入门 Pulsar 是一个分布式发布-订阅消息平台&#xff0c;具有非常灵活的消息模型和直观的客户端 API。 最初由 Yahoo 开发&#xff0c;在 2016 年开源&#xff0c;并于2018年9月毕业成为 Apache 基金会的顶级项目。Pulsar 已经在 Yahoo 的生产环境使用了三年多&#…...

[Bug]使用duckduckgo的duckduckgo_search API搜索图片出现了错误

现在在kaggle上学习一个课程&#xff0c;第一课主要是识别图片里面是不是鸟&#x1f426;。其中一步是使用duckduckgo 搜索图片&#xff0c;源码&#xff1a; from duckduckgo_search import ddg_images from fastcore.all import * from fastbook import search_images_ddgde…...

线程池若干问题

线程池中线程异常后&#xff0c;销毁还是复用&#xff1f; 线程池在提交任务前&#xff0c;可以提前创建线程吗&#xff1f; 线程池中线程异常后&#xff0c;销毁还是复用&#xff1f; 直接说结论&#xff0c;需要分两种情况&#xff1a; 使用execute()提交任务&#xff1a…...

k8s+RabbitMQ单机部署

1 k8s 配置文件yaml: apiVersion: apps/v1 kind: Deployment metadata:name: rabbitmq-deploynamespace: rz-dt spec:replicas: 1selector:matchLabels:app: rabbitmqtemplate:metadata:labels:app: rabbitmqspec:containers:- name: rabbitmqimage: "rz-dt-image-server…...

github.com/therecipe/qt windows中安装

github.com/therecipe/qt windows中安装 a.准备好源码,解压到go/src/github.com/therecipe/qtwin下 b.设置cmd环境变量: set QT_DIRM:\work\tool\Qt5.14.2\5.14.2\mingw73_64 set QT_VERSION5.14.2 set QT_API5.13.0 set QT_QMAKE_DIRM:\work\tool\Qt5.14.2\5.14.2\mingw73_64\…...

LogicFlow 学习笔记——11. 对齐线 和 键盘快捷键

对齐线 Snapline 对齐线能够在节点移动过程中&#xff0c;将移动节点的位置与画布中其他节点位置进行对比&#xff0c;辅助位置调整。位置对比有如下两个方面。 节点中心位置节点的边框 对齐线使用 普通编辑模式下&#xff0c;默认开启对齐线&#xff0c;也可通过配置进行关…...

FastWeb - Lua开源跨平台网站开发服务

在网站开发领域&#xff0c;大家都熟知PHPStudy和宝塔这两款广受欢迎的工具&#xff0c;但今天我要介绍的是一款功能强大、支持跨平台的开源Lua网站开发服务——Fast Web&#xff0c;以及与之配套的网站管理器。 Fast Web简介 Fast Web是一款基于Lua编写的网站开发框架&#…...

原子阿波罗STM32F767程序的控制器改为STM32F407驱动LCD屏

由于手里没有原子大神的F429开发板&#xff0c;又还想学习原子大神的F429开发板程序&#xff0c;前几天&#xff0c;经过更换控制器&#xff0c;成功把原子大神的F429开发板程序用到了F407开发板上&#xff0c;驱动LCD屏显示成功&#xff0c;目的&#xff0c;就是熟悉原子大神的…...

04-jQuery工具函数及 jQuery 插件

1. jQuery工具函数 在jQuery中,工具函数是指直接依附于jQuery对象,针对jQuery对象本身定义的方法,即全局性的,我们统称为工具函数,或Utilites函数。 主要作用于&#xff1a;字符串、数组、对象。 调用格式: $.函数名()或jQuery.函数名() 1.1 $.get() 通过远程 HTTP GET 请…...

基于Python的花卉识别分类系统【W9】

简介&#xff1a; 基于Python的花卉识别分类系统利用深度学习和计算机视觉技术&#xff0c;能够准确识别和分类各种花卉&#xff0c;如玫瑰、郁金香和向日葵等。这种系统不仅有助于植物学研究和园艺管理&#xff0c;还在生态保护、智能农业和市场销售等领域展现广泛应用前景。随…...

Visual Studio Code 配置教程,手把手教你如何配置

文章目录 引言1. 安装 VS Code1.1 下载和安装1.2 初次启动 2. 基本配置2.1 设置用户和工作区配置2.2 常用配置项 3. 安装和配置扩展插件3.1 安装扩展3.2 推荐扩展3.3 配置扩展 4. 主题和配色方案4.1 安装主题4.2 切换主题4.3 自定义配色方案 5. 版本控制集成5.1 配置 Git5.2 Gi…...

教案:Horovod v0.2 介绍与使用

课程目标 了解Horovod的主要功能和优势。学习如何安装和配置Horovod。掌握Horovod在分布式训练中的应用。 教学内容 Horovod的简介和动机 动机 使单GPU训练脚本轻松扩展到多GPU训练。尽量减少代码修改以实现分布式训练。内部采用MPI模型&#xff0c;代码变动较少&#xff0c;…...

深入探索Spring Boot:原理与实践

Spring Boot作为一个简化Spring应用开发的框架&#xff0c;近年来在Java开发者中备受推崇。它通过提供默认配置、自动化配置和一系列开箱即用的功能&#xff0c;极大地简化了应用程序的开发和部署过程。在本篇文章中&#xff0c;我们将深入探讨Spring Boot的工作原理&#xff0…...

基于SSM框架的电影院售票网站

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果您对我们的电影院售票网站感兴趣或者有相关需求&#xff0c;欢迎通过文末的联系方式与我联系。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM框架 工具&#xff1a;ID…...

oracle发送http请求

UTL_HTTP包让SQL和PLSQL能够调用超文本传输协议&#xff08;HTTP&#xff09;&#xff0c;也就是说可以使用它在Internet上访问数据。 当包用HTTPS从Web site获取数据时&#xff0c;要使用Oracle Wallet&#xff0c;它是由Oracle Wallet Manager或者orapki utility创建。非HTT…...

软件回归测试:策略及案例分析

软件回归测试&#xff1a;策略及案例分析 回归测试的定义回归测试的执行阶段回归测试的种类回归测试的策略结论 回归测试的定义 回归测试是一种质量保障措施&#xff0c;其主要目的是验证在进行修改、增加新功能或修复错误后&#xff0c;系统的原有功能仍然能够正常工作&#…...

openstack搭建

openstack搭建 1、虚拟机部署规划 主机主机名IP规划实例通讯内部通讯控制节点controller192.168.10.144192.168.1.144实例节点compute192.168.10.145192.168.1.145 2、硬件配置 主机名内存逻辑CPU数量硬盘容量controller4G480Gcompute4G480G20G 3、安装centos7&#xff0c…...

HIVE及SparkSQL优化经验

简介 针对高耗跑批时间长的作业&#xff0c;在公司近3个月做过一个优化专项&#xff1b;优化成效&#xff1a;综合cpu、内存、跑批耗时减少均在65%以上&#xff1b; cpu和内存消耗指的是&#xff1a;vcoreseconds和memoryseconds 这里简单说下优化的一些思路&#xff0c;至于…...

Django 5 Web应用开发实战

文章目录 一、内容简介二、目录内容三、值得一读四、适读人群 一、内容简介 《Django 5 Web应用开发实战》集Django架站基础、项目实践、开发经验于一体&#xff0c;是一本从零基础到精通Django Web企业级开发技术的实战指南。《Django 5 Web应用开发实战》内容以Python 3.x和…...

互联网摸鱼日报(2024-06-17)

互联网摸鱼日报(2024-06-17) 36氪新闻 本周双碳大事&#xff1a;历年最大规模SNEC人气火热&#xff1b;首批CCER审定与核查机构名单出炉&#xff1b;特斯拉储能业务年增长率将达200%至300% 烧光百亿&#xff0c;离奇破产&#xff01;顶级天才&#xff0c;让广东损失惨重 奥特…...

Docker Desktop Installer For Windows 国内下载地址

官网&#xff1a; Docker Desktop For Windows: https://download.docker.com/win/stable/Docker%20Desktop%20Installer.exe 通过Docker官网下载Docker Desktop安装包非常慢&#xff0c;而且还会下载失败。 解决方案 网盘下载&#xff1a; 链接&#xff1a;https://pan.qu…...

做好程序前设计

不要小看任何一道编程题目&#xff01;一定一定一定要想好之后再动手&#xff01;&#xff01;&#xff01; 带上你的草稿本&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xf…...

php在网站制作中的运行机制/百度网络营销中心app

1.创建项目屏幕快照 2018-12-14 23.22.23.png2.添加依赖项屏幕快照 2018-12-14 23.23.55.png屏幕快照 2018-12-14 23.24.24.png3.添加数据库字符串在appsetting.json中添加数据库信息"DefaultDbConnect": "serverlocalhost;databasedemo;userroot;password12345…...

甘肃县门户网站建设方案/seo关键词快速获得排名

cocos2dx 标签3.0之前1. LabelTTF2. LabelAtlas3. LabelBMFont3.x Label1. createWithSystemFont函数2. createWithTTF函数3. createWithBMFont函数4. ttfconfig配置文件资源文件3.0之前 1. LabelTTF 它基于系统字体&#xff0c;TTF是系统库的意思后三个参数分别是画布的大小…...

廊坊网站快速排名优化/郑州网站设计

互联互通社区专注于IT互联网交流与学习&#xff0c;旨在打造最具价值的IT互联网智库中心。为丰富互联互通社区社区内容&#xff0c;给广大的关注者更丰富、更精彩、更时尚的阅读体验&#xff0c;互联互通社区视频号现已上线。互联互通社区-视频号&#xff0c;网罗IT互联网圈内的…...

网站建设与管理相关工作岗位/seo基础入门

原文地址为&#xff1a; Python MySQLdb 学习总结任何应用都离不开数据&#xff0c;所以在学习python的时候&#xff0c;当然也要学习一个如何用python操作数据库了。MySQLdb就是python对mysql数据库操作的模块。官方Introduction : MySQLdb is an thread-compatible interface…...

天津做网站好的公司/互联网广告代理商

参考链接 点击跳转 转载于:https://www.cnblogs.com/daydayhave/p/9602583.html...

平顶山城市住房城乡建筑网站/seo系统培训课程

2019独角兽企业重金招聘Python工程师标准>>> 1、什么是plist文件&#xff1f; 在做iOS开发时&#xff0c;我们应该经常会用到plist文件&#xff0c;那么什么是plist文件呢&#xff1f;它全名是Property List&#xff0c;属性列表文件&#xff0c;它是一种用来存储串…...