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

第1章 初识C语言

第1章 初识C语言

1.1 C语言概述

1.1.1 C语言的发展历史

C语言的原型为ALGOL 60语言(也称A语言)。
1963年 剑桥大学将ALGOL 60语言发展成为GPL语言。
1967年 剑桥大学的Matin Richards简化GPL,产生了BGPL语言。
1970年 美国贝尔实验室的Ken Thompson将GPL语言修改为B语言。
1973年 美国贝尔实验室的Dennis M.Ritchie在B语言的基础上设计出了C语言。
1978年 Brian W.Kernighan和Dennis M.Ritchie出版了名著《The C Programming Language》。

1.1.2 C语言标准

美国国家标准协会(ANSI)组织了由硬件厂商、软件设计师、编译器设计师等成员成立的标准C委员会,建立了通用的C语言标准。第一版C语言标准在1989年颁布,称为C89。从1989年至今,陆续颁布了多个C语言标准。

1.C89(C90)标准
1989年,ANSI通过C89标准,人们习惯称为ANSI C。
1990年,ISO采用C89作为C语言国际标准。

2.C99标准
1999年,ISO和IEC发布了C99标准。C99引入了很多新特性,如变长数组,本书基于C99标准讲解。

3.C11标准
2011年,ISO和IEC发布C11标准 。C11提高了对C++的兼容性,并增加了很多新特性,如多线程。

1.1.3 C语言特点

1.表达能力强
C语言自由简洁,使用简单的方法就能构造出复杂数据类型或者数据结构,具备复杂数据结构运算能力。

2.结构化设计
C语言程序开发思路是自顶向下,模块化编程,各个功能模块之间呈现结构化特点。

3.高效性
C语言可以直接操作内存,执行效率更接近汇编。

4.可移植
C语言编译器兼容性比较强,能够移植到不同设备上,因此C语言程序的移植性也比较强。

1.1.4 C语言应用领域

1.操作系统
C语言可以用于开发操作系统,主要是个人桌面应用领域的Windows系统内核、服务器领域的Linux内核等。

2.应用软件
C语言高效、稳定,因此常用于开发企业数据管理软件,如Oracle、MySQL等。

3.嵌入式
C语言更接近底层的汇编语言,可以进行嵌入式开发,在智能领域方面有着广泛应用。

4.游戏开发
C语言具有强大的图像处理能力、可移植性、高效性等特点,因此常用于大型游戏开发,进行游戏环境渲染、图像处理等。

1.2 C语言开发环境搭建

市面上有许多支持C语言的开发工具,良好的开发环境具有以下功能:方便开发人员编写程序、方便程序调试和运行、提高开发效率。
在这里插入图片描述
Visual Studio
目前最流行的C语言开发工具为Visual Studio,它是微软开发的集成环境,工具齐全,支持多种语言。
目前最新版本为Visual Studio 2022。
Visual Studio 2022有3个版本:企业版、专业版、社区版。
社区版免费用于个人和开源项目开发,是教学和初学C语言者的首选。

步骤一:访问Visual Studio官网,下载Visual Studio 2022 Community版本,下载完成后双击安装包,弹出程序组件安装提示框。
在这里插入图片描述
步骤二:单击“继续”按钮,下载安装Visual Studio 2022需要的程序组件。
在这里插入图片描述
步骤三:下载安装完成之后,会弹出一个界面,让用户选择所需要的开发环境。
在这里插入图片描述
步骤四:选择开发需要的工具与环境,由于本教材是将Visual Studio 2022作为C语言开发环境,C++兼容C语言,所以在步骤三中选择“使用C++的桌面开发”选项即可,选择完成之后,单击安装位置后面的“更改…”链接,进入安装路径选择界面。在这里插入图片描述
步骤五:选择Visual Studio 2022的安装路径、下载缓存路径。路径选择完成后,单击“安装”按钮开始安装Visual Studio 2022。在这里插入图片描述
步骤六:安装完成后,打开Visual Studio 2022,首次启动时,Visual Studio 2022会提示登录。
在这里插入图片描述
步骤七:可以跳过账号登录,弹出主题设置界面。
在这里插入图片描述
步骤八:完成主题设置后,单击“启动Visual Studio”按钮,启动Visual Studio 2022。
在这里插入图片描述

1.3 第一个C语言程序

1.3.1 新建项目

1.在Visual Studio 2022启动界面中,单击“创建新项目”选项,弹出创建新项目对话框。
在这里插入图片描述
2.选择“控制台应用”选项,然后单击“下一步”按钮,进入配置新项目界面。
在这里插入图片描述
3.设置项目名称、选择项目存储路径,并勾选“将项目解决方案和项目放在同一个目录中”选项。配置完成之后,单击“创建”按钮完成项目创建,进入项目管理主界面。
在这里插入图片描述
1.3.2 编写程序代码
1.在上一页图中,选中右侧Test项目下的源文件,单击右键,选择“添加”→“新建项”。在这里插入图片描述
2.单击“新建项”,系统会弹出添加新项对话框。在这里插入图片描述
3.将文件命名为helloworld.c,单击“添加”按钮,helloworld.c源文件创建成功。双击打开helloworld.c文件,在文件空白区域编写代码。
在这里插入图片描述

1.3.3 编译运行程序

单击菜单栏的“调试”→“开始运行(不调试)”,运行程序,或单击菜单栏“本地Windows调试器”按钮运行程序。程序运行后,会弹出运行结果的命令行窗口,该窗口会输出程序的运行结果。
在这里插入图片描述

1.3.4 代码分析

在这里插入图片描述在这里插入图片描述

1.4 C程序编译机制

C语言程序从源代码到可执行代码需要经过预处理、编译、汇编和链接四个步骤。
在这里插入图片描述
预处理

  • 展开所有宏,如#define,将宏替换为它定义的值。
  • 处理所有条件编译指令,如#ifdef、#ifndef、#endif。
  • 处理文件包含语句,如#include,将包含的文件直接插入到语句所在处。

编译

  • 删除所有注释。
  • 添加行号和文件标识,以便在调试和编译出错时快速定位到错误所在行。

汇编

将生成的汇编文件*.s翻译成计算机能够执行的指令。称为目标文件或者中间文件。

  • Linux系统:.o文件。
  • Windows系统:.obj文件。

链接

将二进制文件与代码中用到的库文件进行绑定,这个过程称为链接,处理程序各个模块之间的关系,完成地址分配、空间分配、地址绑定等操作,链接操作完成后将生成可执行文件。

动态库与静态库*

链接分为静态库链接和动态库链接。

静态库链接

  • 静态库在Linux中是.a文件,Windows下是.lib文件。
  • 本质上是一组目标文件的集合。
  • 链接过程:将包含该函数功能的库文件全部链接到目标文件中。
  • 开发效率高,但更新难。

动态库链接

  • 动态库在Linux中是.so文件,Windows下是dll文件。
  • 在程序运行时只对需要的目标文件进行链接。
  • 节省空间且可以共享,隐藏了细节,便于更新。

相关文章:

第1章 初识C语言

第1章 初识C语言 1.1 C语言概述 1.1.1 C语言的发展历史 C语言的原型为ALGOL 60语言(也称A语言)。 1963年 剑桥大学将ALGOL 60语言发展成为GPL语言。 1967年 剑桥大学的Matin Richards简化GPL,产生了BGPL语言。 1970年 美国贝尔实验室的Ken…...

【考研数学】定积分应用——旋转体体积的计算(一文以蔽之)

目录 一、如何计算旋转体体积?思考一个小例子 二、旋转体体积的二重积分表达式 三、用真题,小试牛刀 定积分的应用中,有一类题是求解旋转体的体积问题。 相较于记忆体积计算公式,有一种通法求解体积更不容易出错:二重…...

PHP移动端商城分销全平台全端同步使用

📱【掌中购物新纪元:探索移动端购物商城系统的无限魅力】🛍️ 🚀 随时随地,购物自由新体验 在这个快节奏的时代,移动端购物商城系统彻底颠覆了传统购物方式,让消费者享受到了前所未有的便捷与…...

TLE8386-2EL:汽车级DC-DC转换器中文资料书

描述 TLE8386-2EL是一款具有内置保护功能的低端感应升压控制器。该器件的主要功能是将输入电压升高&#xff08;升压&#xff09;到更大的输出电压。开关频率可从100kHz调整至700kHz&#xff0c;并可与外部时钟源同步。 TLE8386-2EL的独特功能可将关断电流消耗降至 <2μA。该…...

EasyRecovery17中文mac苹果电脑版数据恢复软件 永久免费破解版下载

&#x1f389; 数据丢失不再是噩梦&#xff01;EasyRecovery17中文版来拯救你的硬盘啦&#xff01; 各位小伙伴们&#xff0c;有没有遇到过重要文件一不小心就消失无踪的尴尬情况&#xff1f;别担心&#xff0c;今天就给大家种草一款神奇的工具——EasyRecovery17中文版&#x…...

Ubuntu 22.04 安装 VirtualBox7

Ubuntu默认库为VirtualBox-6版本 # 安装 VirtualBox-6 sudo apt update sudo apt install virtualbox# 卸载 VirtualBox-6 sudo apt remove --purge --auto-remove virtualbox virtualbox-6.1 1. 安装 VirtualBox-7 # 导入软件包密钥 curl https://www.virtualbox.org/downl…...

NPM使用教程:从入门到精通

NPM使用教程&#xff1a;从入门到精通&#xff0c;掌握Node.js包管理神器 引言 随着Node.js的流行&#xff0c;JavaScript已经成为服务器端开发的主力军。NPM&#xff08;Node Package Manager&#xff09;作为Node.js的官方包管理工具&#xff0c;为开发者提供了一个庞大的代…...

模电实验3 - 单电源集成运放交流耦合放大器

实验目标 学习集成运放的单电源使用。掌握交流耦合单电源集成运放放大器的测试方法。了解交流耦合单电源集成运放放大器的特点。 实验器材 ADALM2000 1kΩ 电阻 (1/4 W) x 1 10 kΩ 电阻 (1/4 W) x 1 100kΩ 电阻 (1/4 W) x 3 0.1μF电容 x 1 1μF电容 …...

海对外经贸大学学报

《上海对外经贸大学学报》创刊于1994年&#xff0c;原名为《世界贸易组织动态与研究》(上海对外贸易学院学报)&#xff0c;随原上海对外贸易学院更名为上海对外经贸大学&#xff0c;自2014年起更为现名&#xff0c;现为综合性社科类双月刊&#xff0c;为中文社会科学引文检索&a…...

数字化营销在公域场景中的无限可能

在如今的商业领域&#xff0c;公域场景为企业提供了广阔的发展空间&#xff0c;而数字化营销则成为了企业在这些场景中脱颖而出的关键利器。 ​ 一、电商平台营销 当企业在淘宝、京东等大型电商平台开设店铺&#xff0c;数字化营销便开始大显身手。 企业不仅能踊跃参与像双十…...

聚观早报 | 一加13配置细节曝光;谷歌首推人工智能手机

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 8月15日消息 一加13配置细节曝光 谷歌首推人工智能手机 MONA M03汽车即将上市 iPhone SE 4将升级8GB运行内存 R…...

C++ 11相关新特性(lambda表达式与function包装器)

目录 lambda表达式 引入 lambda表达式介绍 lambda表达式捕捉列表的传递形式 lambda表达式的原理 包装器 包装器的基本使用 包装器与重载函数 包装器的使用 绑定 C 11 新特性 lambda表达式 引入 在C 98中&#xff0c;对于sort函数来说&#xff0c;如果需要根据不同的比较方式实现…...

FastAPI部署大模型Llama 3.1

项目地址&#xff1a;[self-llm/models/Llama3_1/01-Llama3_1-8B-Instruct FastApi 部署调用.md at master datawhalechina/self-llm (github.com)](https://github.com/datawhalechina/self-llm/blob/master/models/Llama3_1/01-Llama3_1-8B-Instruct FastApi 部署调用.md) …...

C++拾趣——编译器预处理宏__COUNTER__的应用场景

大纲 生成唯一标识符调试信息宏展开模板元编程代码 在C中&#xff0c;__COUNTER__是一个特殊的预处理宏&#xff0c;它主要被用来生成唯一的整数标识符。这个宏是由一些编译器&#xff08;如GCC和Visual Studio&#xff09;内置支持的&#xff0c;而不是C标准的一部分。它的主要…...

使用HTML和cgi实现网页登录功能

0.HTML文件结构 一.HTML文件 1.test.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>菜鸟教程(runoob.com)</title></head><body><!-- 将结果提交给/cgi-bin/test.cgi下 --><form actio…...

Java流程控制01:用户交互Scanner

本节教学视频链接&#xff1a;https://www.bilibili.com/video/BV12J41137hu?p33&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p33&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 Scanner 类用于扫描输入文本从字符串中提…...

什么是回滚

回滚&#xff08;Rollback&#xff09;是指当程序或数据出现错误时&#xff0c;将程序或数据恢复到最近一个正确版本或上一次正确状态的行为。回滚机制在软件开发、数据库管理、系统部署等多个领域都有广泛应用&#xff0c;旨在保证系统的稳定性和数据的完整性。以下是关于回滚…...

Java项目通过IDEA远程debug调试

前言 在我们真实项目开发过程中&#xff0c;又是经常会发现一种问题&#xff0c;就是我们在开发环境功能是正常的&#xff0c;在测试环境可能也不太容易发现问题。 结果到了生产环境&#xff0c;由于数据量大&#xff0c;且数据类型变多后&#xff0c;就产生了一些比较难复现…...

Python 绘图入门

数据可视化的概念及意义 数据可视化有着久远的历史&#xff0c;最早可以追溯至10世纪&#xff0c;至今已经应用和发展了数百年。不知名的天文学家是已知的最早尝试以图形方式显示全年当中太阳&#xff0c;月亮和行星的位置变化的图。 图1 数据可视化的发展历程 什么是数据可视…...

RK3568平台(背光篇)背光驱动代码分析

一.背光驱动设备树DTS backlight: backlight {compatible "pwm-backlight";pwms <&pwm1 0 5555555 1>;brightness-levels <77 77 78 78 79 79 80 8182 83 84 85 86 87 87 8888 89 90 90 91 91 92 9394 94 95 95 96 96 9…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了&#xff0c;很多小伙伴想体验鸿蒙电脑版操作系统&#xff0c;可惜&#xff0c;鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机&#xff0c;来体验大家心心念念的鸿蒙系统啦&#xff01;注意&#xff1a;虚拟…...

Qt的学习(一)

1.什么是Qt Qt特指用来进行桌面应用开发&#xff08;电脑上写的程序&#xff09;涉及到的一套技术Qt无法开发网页前端&#xff0c;也不能开发移动应用。 客户端开发的重要任务&#xff1a;编写和用户交互的界面。一般来说和用户交互的界面&#xff0c;有两种典型风格&…...

React核心概念:State是什么?如何用useState管理组件自己的数据?

系列回顾&#xff1a; 在上一篇《React入门第一步》中&#xff0c;我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目&#xff0c;并修改了App.jsx组件&#xff0c;让页面显示出我们想要的文字。但是&#xff0c;那个页面是“死”的&#xff0c;它只是静态…...

【java】【服务器】线程上下文丢失 是指什么

目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失&#xff1f; 直观示例说明 为什么上下文如此重要&#xff1f; 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程&#xff0c;代码应该如何实现 推荐方案&#xff1a;使用 ManagedE…...