C语言简介

1、C语言简介

发展历史:BCPL->newB->C->UNIX->Minux->Linux->gcc

C语言诞生1970~1973年,在肯.汤普逊和丹尼斯.里奇的领导下编写完成的,归属于美国的贝尔实验室。
C语言专门编写操作系统的语言,所以天生适合对硬件编程,也速度快著称。也非常适合实现数据结构与算法。
由于出现时间早,有很多缺陷,也没想到普通人也会使用C语言编程,因此存在很多的缺陷、陷阱,
但是前辈们总结了一些避免的经验《C语言的陷阱与缺陷》
C语言的语法很自由,但是也意味着危险,自由源于自律

C89语法标准,也是gcc默认的编译标准
C99语法标准,对C语言的扩展和增强 -std=gnu99
C11语言标准,全新的升级

2、第一个程序

程序员所编写的代码并不是标准C代码,需要一段程序对他进行翻译的C代码,负责翻译的程序叫做预处理器,
翻译的构成叫做预处理。被翻译的代码叫做预处理指令。在C语言中以#开头的都是预处理指令。
#include 功能是把一个头文件导入到当前文件中
#include <>从系统指定的目录下导入头文件
#include ""先从当前目录下导入头文件,如果没有,再从系统指定目录下导入头文件
$PATH 查看当前环境变量
stdio.h
头文件: .h 里面存储的一些辅助性的代码,绝大多数都是函数的声明(只是函数的开头)
源文件: .c结尾,里面记录的是功能性的代码
C语言标准委员会为C语言以函数形式提供了一些基础功能,这些函数被封装在代码库lib.so中,stdio.h就是
其中的说明,常用的话啊有string.h stdlib.h
stdio.h主要负责对具有输入输出功能的函数进行说明
#include<stdio.h>
{
int main()
{
printf(“HELLO WORLD\n”);
return 0;
}
C语言以函数为单位管理代码的,一个函数就段具有某项功能的代码的集合。
main函数是程序的入口,有且只有一个
int是一种数据类型,他表示main的执行结果是一个整数
return 功能有两个:1.结束函数的执行 2.返回一个执行结果给函数的调用者
main函数是由操作系统调用的,因此它的返回值返回给调用系统,反应了该程序是如何结束的,通常有三种情况:

正数 出现异常(别人的错误)
0 一切正常
负数 出现错误(自己的错误)
echo $? 查看上一个程序main函数的返回值

printf/scanf 都是标准库中的函数,负责输入、输出数据,用来调试代码
转义字符:
键盘上一切没有的符号,用一些特殊的字符来表示。这些特殊的字符就是转义字符,\n就是其中一个
\n 换行
\ 打印一个
%% 打印一个%
\r回到行首
\t 制表符Tab键,用来输出对齐
\a 铃响
\b 退一个字符

C语言以分号作为一行代码的结束,使用大括号划分代码区域

3、编译器

负责把人能看懂的记录代码的文本文件,翻译成计算机能看懂的二进制文件,由预处理器、编译器、链接器组成
gcc是由GNU组织为了编译Linux代码而开发的一款免费的编译器,默认采用C89语法标准,
-set=gnu99可以设置为C99语法标准
常用的参数;
-E 显示预处理的结果
-c 只编译不链接
-o 指定编译结果的名字
-S 生成汇编代码
-I 指定头文件的加载路径
-l 指定要使用的代码库 -lm 使用数学库
-Wall 以严格的标准检查代码,显示更多的警告提醒
-Werror 把警告当做错误处理
-std= 指定编译语法标注

4、把C代码变成可执行程序的过程

1.预处理 把源文件翻译成预处理文件
gcc -E code.c 显示预处理的结果到终端上
gcc -E code.c -o code.i 生成以i结尾的预处理文件
2.编译 把处理文件翻译成汇编文件
gcc -S code.i ->code.s 生成以.s结尾的汇编文件
3.汇编 把汇编代码翻译成二进制的目标文件
gcc -c code.s ->code.o 生成以点o结尾的目标文件
4.链接 把若干个目标文件合并成一个可执行文件
gcc a.o b.o c.o … ->a.out

5、C文件类型

.h 头文件
.h.gch 头文件的编译结果,它会被优先使用
.c 源文件
.i 预处理文件
.s 汇编文件
.o 目标文件
.a 静态库文件
.so 共享库文件

6、存储空间的单位

Bit 比特 一个二进制位,只存储0或1,计算机存储数据的最小单位
Byte 字节 八个二进制位 计算机存储容量的基本单位
KB 1024字节
MB 1024KB
GB 1024MB
TB 1024GB
PB 1024TB

7、数据类型

为什么要对数据进行分类:
1、现实社会中,数据是自带类别的属性
2、对数据进行分类可以节约存储空间、提高运行效率

C语言中数据分为两大类:自建(程序员自己设计的,例如:结构、联合、类)和内建(C语言自带)
sizeaf() 计算类型的字节数
整型:
signed 有符号
signed char 1 -128~127
signed short 2 -32768~32767
signed int 4 正负20亿
signed long 4/8 正负20亿/正负9开头的19位整数
signed long long 8 正负9开头的19位整数
unsigned 无符号
unsigned char 1 0~255
unsigned short 2 0~65535
unsigned int 4 0~40亿
unsigned long 4/8 040亿/01开头的20位数
unsigned long long 8 0~1开头的20位数
注意:signed 不加就代表加 但是unsigned必须加

注意:由于定义无符号整数数据时比较麻烦,因此标准库把这些无符号类型重新定义成以下类型:
需要包含头文件 stdint.h
uint8_t uint16_t uint32_t uint64_t
int8_t int16_t int32_t int64_t

浮点型:
float 4
double 8
long double 12/16
注意:采用科学计数法,二进制数与真实数据之间需要换算,因此计算浮点型数据比计算整型来的要慢,
因此尽量选择整型使用
小数点后6位有效

模拟:
char字符型 字符其实就是符号或者团,在内存中存储的其实是整数,显示时会根据ASCII码表中
对应的关系来显示对应的符号或图案
0 ‘\0’
48 ‘0’
65 ‘A’
97 ‘a’

bool布尔型 C语言中是不可能有真正的布尔类型,因为现有C语言才有bool类型,stdbool.h对布尔类型进行模拟
bool true false
可以使用 sizeof()计算类型的字节数

8、变量与常量

什么是变量:程序运行期间数值可以变化的叫做变量,相当于存放数据的盒子。
定义: 类型 变量名;
int num;
取名规则:
1、由数字、字母、下划线组成
2、不能以数字开头
3、不能与C语言关键字(32个)重名,要求默写
4、见名知意(功能、类型、范围)
printf scanf bool sizeof()计算类型的字节数

注意:变量的默认值是随机的,为了安全起见,一般初始化为0
使用:
赋值: num = 100;
参与运算: num*10

变量的输入、输出:
int printf(const char *format,…);
功能:输出数据
format:双引号包含的格式信息(提示信息+占位符)
…:变量名列表
返回值:成功输出字符的个数

int scanf(const char *format, …);
功能:输入书记
format:双引号包含的格式信息(占位符)
…:变量地址列表
返回值:成功输入变量的个数
注意:scanf需要的是变量的类型和地址 &变量名 <=> 变量的地址

类型占位符:C语言通过类型占位符来传递变量的类型
%hhd %hd %d %ld %lld
%hhu %hu %u %lu %llu
%f %lf %LF
什么是常量:程序运行期间数值不能改变的叫做常量
100 默认int
100l long
100ll long long
100u unsigned int
100lu unsigned long
100llu unsigned long long
3.14默认double
3.14f flloat

9、格式化输入输出

%nd 显示n个字符宽度,不够则部空格,右对齐
%-nd 显示n个字符宽度,不够则补空格,左对齐
%0nd 显示n个字符宽度,不够则补0
%n.mf 显示n个字符宽度(小数点也算一位),不够则补空格,m表示小数点后的位数(四舍五入)
%g 不显示小数点后多余的0

10、运算符

自变运算符: ++/-- 使变量的只自动加、减1
前自变:++num --num 立即有效
后自变:num++ num-- 下一条语句才生效
注意:不要再一行代码中出现多个自变运算符

算术运算符:+ - * / %
/ 除数不能为0, 负责会场生浮点数例外,核心已转储。程序直接挂掉
整数/整数 结果没有小数点
关系运算符:> < >= <= !=
比较结果是0或者1,比较的结果还能继续参与运算
int num = 0;
10<num<100 永远为真,与数学的运算规则不同
if(num == 10)
if(10 == num) 常数最好放左边防止漏打了=
逻辑运算符: && || !
会先把运算对象转换为逻辑值,0转换假,非0值转换真
A && B :一假到底
A || B :一真即真
!A :求反 优先级极高 一个操作符 单目运算符优先级高
&& || 具有短路特性,当左边的值可以确定整个表达式结果时,右边的不再计算
三目运算符
A?B:C 判断A的值,如果为真者执行B,如果为假则执行C
该语句不能出现流程控制语句,因为它必须要有运算结果

赋值运算符:= += -= *= /=

位运算符:& | ~ << >> ^

内容概要:本文详细介绍了“秒杀商城”微服务架构的设计与实战全过程,涵盖系统从需求分析、服务拆分、技术选型到核心功能开发、分布式事务处理、容器化部署及监控链路追踪的完整流程。重点解决了高并发场景下的超卖问题,采用Redis预减库存、消息队列削峰、数据库乐观锁等手段保障数据一致性,并通过Nacos实现服务注册发现与配置管理,利用Seata处理跨服务分布式事务,结合RabbitMQ实现异步下单,提升系统吞吐能力。同时,项目支持Docker Compose快速部署和Kubernetes生产级编排,集成Sleuth+Zipkin链路追踪与Prometheus+Grafana监控体系,构建可观测性强的微服务系统。; 适合人群:具备Java基础和Spring Boot开发经验,熟悉微服务基本概念的中高级研发人员,尤其是希望深入理解高并发系统设计、分布式事务、服务治理等核心技术的开发者;适合工作2-5年、有志于转型微服务或提升架构能力的工程师; 使用场景及目标:①学习如何基于Spring Cloud Alibaba构建完整的微服务项目;②掌握秒杀场景下高并发、超卖控制、异步化、削峰填谷等关键技术方案;③实践分布式事务(Seata)、服务熔断降级、链路追踪、统一配置中心等企业级中间件的应用;④完成从本地开发到容器化部署的全流程落地; 阅读建议:建议按照文档提供的七个阶段循序渐进地动手实践,重点关注秒杀流程设计、服务间通信机制、分布式事务实现和系统性能优化部分,结合代码调试与监控工具深入理解各组件协作原理,真正掌握高并发微服务系统的构建能力。
C语言是一种通用的、面向过程的计算机程序设计语言,由丹尼斯·里奇于1972年在贝尔实验室为开发UNIX操作系统而设计开发,它继承了B语言的许多思想,并加入了数据类型的概念及其他特性[^1]。 C语言标准于1988年由美国国家标准协会(ANSI)制定。截至1973年,UNIX操作系统完全使用C语言编写。目前,它是最广泛使用的系统程序设计语言,大多数先进的软件都是使用C语言实现的,像当今流行的Linux操作系统和关系数据库管理系统MySQL都是用C语言编写的[^2]。 C语言具有诸多特点: - 高效性:能直接访问硬件,对内存进行操作,可实现对性能要求极高的程序设计,适用于操作系统、嵌入式系统等[^3]。 - 可移植性:编写的程序可在不同操作系统和硬件平台上编译运行,只需做少量修改或无需修改[^3]。 - 丰富的数据类型和运算符:有整型、浮点型、字符型等基本数据类型,还有数组、指针、结构体等构造数据类型,以及丰富的运算符,可满足各种复杂运算和逻辑处理需求[^3]。 - 简洁性和灵活性:语法简洁,代码执行效率高,通过函数、指针等机制,能以多种方式实现编程任务,具有高度灵活性[^3]。 C语言的基本语法包含变量定义、数据类型、运算符、控制语句和函数等方面。变量使用前需先定义,指定数据类型和名称;基本数据类型有char、int、float、double等;运算符包括算术、关系、逻辑运算符等;控制语句有if - else、switch、for、while、do - while等;函数是程序的基本模块,由函数头和函数体组成,可提高代码的复用性和可维护性[^3]。 C语言程序的代码结构由一个或多个函数组成,必有一个main函数作为程序入口,可包含预处理指令,如#include用于引入头文件,#define用于定义常量和宏,代码通常包含变量定义、函数调用、语句执行等部分,实现程序的具体功能[^3]。 尽管C++、Java等较新的语言流行,但C语言在软件产业中仍是重要技能,一直位列主流编程语言的前三甲,特别是在嵌入式系统编程中占据主导地位,它不仅是一种编程语言,更代表了一种思想和哲学[^4]。 以下是一个简单的C语言示例代码: ```c #include <stdio.h> int main() { printf("Hello, World!\n"); return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值