C语言常见概念

C语言常见概念

  • 什么是C语言
  • C语言的来龙去脉
  • C语言编写软件的选择(VS2022编译器)
  • 源文件和头文件
  • 编写一个简单的C语言程序
  • main函数
  • Printf函数与库函数
  • 关键字介绍
  • 字符和ASCII编码
  • 字符串和\0
  • 转义字符
  • 语句和语句分类
  • 注释是什么?为什么写注释?

一.什么是C语言

我们知道人与人之间的交流采用汉语、英语、日语、韩语等多种自然语言。但计算机无法准确理解人类社会的自然语言,那么就需要一种全新的媒介去链接人与计算机之间的交流,为了实现这种目的,计算机语言应运而生。

C语言就是一种计算机程序设计语言,即计算机语言。

当然,计算机语言经过长时间的发展,已经出现了很多种类型,比如:C++/Java/Go/Python等等,C语言只是其中之一。

说到底,C语言(计算机语言)只是人与计算机对话的一种工具罢了。

二.C语言的来龙去脉

   C语言的原型ALGOL 60语言(也称为A语言)

三.C语言编写软件的选择(VS2022编译器)

3.1编译和链接

C语⾔是⼀⻔编译型计算机语⾔,C语⾔源代码都是⽂本⽂件,⽂本⽂件本⾝⽆法执⾏,必须通过编译器翻译和链接器的链接,⽣成⼆进制的可执⾏⽂件,可执⾏⽂件才能执⾏。

那么什么是编译和链接呢?

编译(Compilation)和链接(Linking)是将高级编程语言编写的源代码转换成可执行代码的过程。编译过程包括多个步骤,如词法分析、语法分析、语义分析和代码生成,旨在将源代码转换成机器代码,通常表现为目标文件(Object file,生成的文件后缀为.obj)。链接过程则是将多个目标文件合并成一个可执行文件(Executable file, 生成的文件后缀为.exe),解决符号引用问题,确保程序中的所有符号都能正确解析和定位。

编译的步骤:

1.预处理(Preprocessing):处理源代码中的预处理指令,如宏定义、条件编译指令和头文件包含等,生成预处理后的代码。

2.编译(Compiling):将预处理后的代码转换成汇编代码,涉及词法分析、语法分析和语义分析。

3.汇编(Assembly):将汇编代码转换成机器代码,生成目标文件,并创建符号表。

链接的步骤:

1.地址和空间分配:确定程序中各部分在内存中的位置。

2.符号决议:解决目标文件中未解决的符号引用,将它们指向正确的定义。

3.重定位:调整目标文件中的地址,确保最终可执行文件中的地址是正确的。

链接的类型:

1.静态链接(Static Linking):在链接阶段将库文件的内容直接复制到最终的可执行文件中。

2.动态链接(Dynamic Linking):在程序运行时加载所需的动态链接库,共享库文件的内存映像,减少内存占用。

编译和链接的重要性:

编译和链接是确保程序正确运行的关键步骤。它们不仅将源代码转换为计算机可以理解的机器代码,还处理跨多个文件和库的符号引用,确保程序的完整性和一致性。

如下图所⽰,简单演⽰了源程序经过编译器和链接器处理的过程:

3.2编译器的比较与选择

C语⾔是⼀⻔编译型的计算机语⾔,需要依赖编译器将计算机语⾔转换成机器能够执⾏的机器指令。

常⻅的C语⾔编译器:

msvc、clang、gcc 就是⼀些常⻅的编译器;

我们一般采用集成开发环境(Integrated Development Environment)编写C语言程序如:VS2022、 XCode、CodeBlocks、DevC++、Clion 等。

IDE优缺点:

Visual Studio 2022 (VS2022)

优点:

1.集成了MSVC编译器,安装简单,无需过多配置。

2.功能强大,包含编辑器、编译器、调试器等,适合企业级开发。

3.默认界面为中文,对初学者友好。

4.社区支持广泛,有丰富的文档和插件生态。

缺点:

1.内存占用较大,安装包体积庞大。

2.主要面向Windows平台,对跨平台开发支持有限。

3.部分高级功能可能需要付费订阅。

Xcode

优点:

1.集成了clang编译器,专为苹果平台设计。

2.界面简洁美观,易于上手。

3.对macOS和iOS开发支持极佳,集成了Apple开发生态系统。

4.提供优秀的调试工具和性能分析器。

缺点:

1.仅支持macOS平台,不适用于Windows或Linux用户。

2.学习曲线较陡,对于新手开发者来说可能需要一定时间去适应。

CodeBlocks

优点:

1.轻量级IDE,开源免费,跨平台支持。

2.插件丰富,可以根据需要扩展功能。

3.适合学习C++和开发小型项目。

缺点:

1.界面相对简陋,调试功能相对薄弱。

2.配置环境可能需要一定的技术知识,尤其是对于新手不太友好。

DevC++

优点:

1.集成了gcc编译器,适合竞赛使用。

2.界面简洁清晰,适合初学者入门使用。

3.免费开源,适合个人和教育用途。

缺点:

1.开发者更新不活跃,可能导致一些Bug得不到及时修复。

2.功能相对简单,对于复杂项目可能不够强大。

CLion

优点:

1.默认使用CMake,编译器可配置。

2.专注于C/C++开发,提供丰富的功能和智能代码编辑器。

3.强大的调试功能,支持本地和远程调试。

4.跨平台支持,包括Windows、macOS和Linux。

缺点:

1.商业软件,需要购买许可证才能使用,不适合个人开发者或预算有限的团队。

2.学习曲线较陡,需要一定时间去熟悉和掌握其功能。

综上所述,推荐⼤家安装 VS2022 的社区版本学习。

四.源文件和头文件

在C语言中,源文件头文件是两种不同类型的文件,它们各自扮演着不同的角色。

源文件(.c文件)

源文件包含C语言的实际代码,包括函数的定义、变量的初始化和程序的主体逻辑。源文件是编译器直接处理的对象,它们在编译过程中被转换成目标代码(通常是.obj或.o文件),这些目标文件随后可以被链接器合并成最终的可执行文件。

头文件(.h文件)

头文件通常包含函数原型、宏定义、类型定义和全局变量声明。它们的主要目的是提供程序中使用的函数和数据结构的接口,以便不同的源文件可以共享这些声明。头文件通过预处理指令#include被包含到源文件中,这样源文件就可以访问头文件中声明的所有元素。

在VS2022中创建一个写代码的源文件(头文件同理)如图:

第一步:打开VS2022,点击创建新项目。

第二步:点击空项目并点击下一步。

第三步:起一个项目名称,不要用汉字;更改位置,将创建的项目放到你想放的路径上去;点击创建。

第四步:在“解决方案资源管理器”中选中源文件右击鼠标,第一个选项“添加”—>“新建项”

第五步:点击C++文件(.cpp),并将下方“源.cc “名称改为”xxx.c “,最后点击“添加”即可。

第六步:开始编写代码吧!

五.编写一个简单的C语言程序

任务:在桌面打印一句英文“hello world!”

#include <stdio.h>

int main()

{

printf(“hello world!\n”);

return 0;

}

编写好程序后点击ctrl+F5运行起来,程序和结果如图:

当然,代码的结构和包含的库函数下面会逐步说明。

六.main函数

main函数是C语言程序的入口点,它是程序执行的起点。在C语言中,main函数必须在每个程序中至少定义一次,并且它是由操作系统直接调用的函数。

main函数也被叫做主函数。main前⾯的int表⽰main函数执⾏结束的时候返回⼀个整型类型的值。所以在main函数的最后写return 0;正好前后呼应。

• main函数是程序的⼊⼝

• main函数有且仅有⼀个

• 即使⼀个项⽬中有多个.c⽂件,但是只能有⼀个main函数(因为程序的⼊⼝只能有⼀个)

main函数常见错误总结:

• main 被写成了mian

• main后边的()漏掉了

• 代码中不能使⽤中⽂符号,⽐如括号和分号

• ⼀条语句结束后,有分号

mian函数通常有两种写法:

不带参数

int main()

{

//程序代码

return 0;

}

带参数:

int main(int argc,char *argv[ ])

{

//程序代码

return 0;

}

这种写法下,main函数接收两个参数:argc和argv。

argc表示命令行参数的数量,argv是一个指向字符串的指针数组,包含了实际的命令行参数。

选择哪种写法取决于程序是否需要从命令行接收参数。如果不需要接收命令行参数,可以使用不带参数的写法。如果需要接收命令行参数,则应使用带参数的写法。

七.printf和库函数

在上⾯的代码中有⼀句代码如下:

代码中使⽤了 printf 函数,实现了在屏幕上的信息的打印。

介绍一下printf函数:

printf 是⼀个库函数,它的功能是在标准输出设备(⼀般指屏 幕)上进⾏信息的打印。上⾯的代码是使⽤ printf 函数打印字符串。只要把想要打印的⼀串字符放 在双引号中并传递给printf函数就可以打印。

printf函数的基本功能和使用场景

printf函数是C语言中用于格式化输出的标准库函数,它允许程序员控制输出数据的格式,包括数字的进制、小数点位数、字符和字符串的输出等。printf函数非常灵活,可以根据不同的格式控制字符串来格式化输出各种类型的数据,广泛应用于调试、日志记录、用户界面交互等场合。

printf函数中常见的格式说明符及其作用

printf函数中的格式说明符用于指定输出数据的格式。以下是一些常见的格式说明符及其作用:

1.%d:输出十进制整数。

2.%u:输出无符号十进制整数。

3.%f:输出浮点数。

4.%s:输出字符串。

5.%c:输出单个字符。

6.%X:输出无符号十六进制整数(%X表示大写字母)。

7.%o:输出无符号八进制整数。

8.%e:以科学计数法输出浮点数。

9.%g:自动选择最紧凑的%f或%e格式输出。

10.%p:输出指针地址。

11.%n:将已打印的字符数保存到指定的整数地址处。

printf函数的返回值及其重要性

printf函数返回成功打印的字符数,如果发生错误则返回负值。这个返回值可以用于检查输出操作是否成功,或者用于计算需要多少空间来存放输出的字符串。

那什么是库函数呢?

为了不再重复实现常⻅的代码,让程序员提升开发效率,C语⾔标准规定了⼀组函数,这些函数再由不 同的编译器⼚商根据标准进⾏实现,提供给程序员使⽤。这些函数组成了⼀个函数库,被称为标准 库,这些函数也被称为库函数。

在这个基础上⼀些编译器⼚商可能会额外扩展提供部分函数(这些函 数其他编译器不⼀定⽀持)。 ⼀个系列的库函数⼀般会声明在同⼀个头⽂件中,所以库函数的使⽤,要包含对应的头⽂件。

除开printf函数外,库函数中还有许多其他函数,需要慢慢积累。

八.关键字

C语⾔中有⼀批保留的名字的符号,⽐如:int、if 、return,这些符号被称为保留字或者关键字。

• 关键字都有特殊的意义,是保留给C语⾔使⽤的

• 程序员⾃⼰在创建标识符的时候是不能和关键字重复的

• 关键字也是不能⾃⼰创建的。

C语⾔的常用32个关键字如下

auto

break

case

char

const

continue

default

do

double

else

enum

extern

float

for

goto

if

int

long

register

return

short

signed

sizeof

static

struct

switch

typedef

 union

unsigned

void

 volatile

while

九.字符和ASCII编码

在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语⾔中字符是⽤单引号 括起来的,如:'a','b','@'。 我们知道在计算机中所有的数据都是以⼆进制的形式存储的,那这些字符在内存中分别以什么样的⼆ 进制存储的呢?如果我们每个⼈⾃⼰给这些字符中的每个字符编⼀个⼆进制序列,这个叫做编码,为 了⽅便⼤家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个标准 ASCII 编码,C 语⾔中的字符就遵循了 ASCII 编码的⽅式。

 

不需要记住,会查表就行。

• 字符A~Z的ASCII码值从65~90 • 字符a~z的ASCII码值从97~122

• 对应的⼤⼩写字符(a和A)的ASCII码值的差值是32 、

• 数字字符0~9的ASCII码值从48~57

• 换⾏ \n 的ASCII值是:10

• 在这些字符中ASCII码值从0~31 这32个字符是不可打印字符,⽆法打印在屏幕上观察

10. 字符串和\0

C语⾔中如何表⽰字符串呢?使⽤双引号括起来的⼀串字符就被称为字符串,如:"abcdef",就是⼀个 字符串。

字符串和'\0'是C语言中非常重要的概念。

字符串是由字符组成的序列,通常用于表示文本信息。在C语言中,字符串通常存储在字符数组中,并以空字符('\0')结尾,表示字符串的结束。这个空字符是字符串的一个重要组成部分,因为它允许程序确定字符串在哪里结束。

举个例子,如果我们有一个字符串 "Hello",它在内存中的实际存储方式是:

'H' 'e' 'l' 'l' 'o' '\0'

可以看到,最后一个字符是'\0',它表示这个字符串已经结束了。

需要注意的是,'\0'是一个转义字符,它表示ASCII码为0的字符,也就是空字符。在C语言中,我们经常使用'\0'来表示字符串的结束,但也可以使用其他字符来表示字符串的结束,不过这需要程序员自己进行处理。

另外,需要注意的是,字符串的长度并不包括结尾的'\0'字符。例如,字符串 "Hello" 的长度是5,而不是6。

11. 转义字符

也许在前⾯的代码中你看到 \n , \0 很纳闷是啥。其实在字符中有⼀组特殊的字符是转义字符,转义 字符顾名思义:转变原来的意思的字符。

转义字符是编程语言中用于表示特殊字符或控制序列的字符。在C语言中,转义字符以反斜杠 \ 开头,后跟一个或多个字符,用以表示除了反斜杠本身以外的一系列控制字符、图形符号或其他预定义的功能字符。例如,\n 表示换行,\t 表示水平制表符,\" 表示双引号,而 \\ 表示一个单独的反斜杠字符。

转义字符的使用允许程序员在字符串中嵌入这些特殊字符,而不会导致语法错误或意外的行为。此外,转义字符还可以用于表示八进制或十六进制数值,以及其他非打印字符。例如,\0 表示空字符(NULL),它在C语言中用于字符串的结束标记,而 \xHH 表示一个十六进制数值,其中 HH 是一到两位的十六进制数字。

C语⾔中像这样的转义字符还有⼀些,具体如下:

12. 语句和语句分类

C语⾔的代码是由⼀条⼀条的语句构成的,C语⾔中的语句可为以下五类:

• 空语句

• 表达式语句

• 函数调⽤语句

• 复合语句

• 控制语句

12.1 空语句

在C语言中,空语句是一种特殊的语句,它由一个单独的分号 ; 组成,不包含任何执行代码。空语句在语法上是合法的,它通常用于在需要语句的位置表示没有任何操作需要执行。

如图:

空语句虽然在语法上是合法的,但过度使用可能会使代码难以理解和维护。因此,应谨慎使用空语句,确保清晰地表达代码的意图.

12.2 表达式语句

在C语言中,表达式语句是由表达式后跟一个分号 ; 组成的语句。表达式语句的特点是执行表达式的计算,并可能产生一个值,但这个值通常不会被保存或进一步使用。表达式语句在C语言中非常常见,它们是编程中执行计算和赋值操作的基本构建块。

表达式语句的类型

C语言中的表达式语句可以分为多种类型,包括:

1.算术表达式语句:涉及算术运算符的表达式,如 a + b;。

2.赋值表达式语句:将表达式的值赋给变量,如 a = b;。

3.关系表达式语句:用于比较两个表达式的值,如 a < b;。

4.逻辑表达式语句:涉及逻辑运算符的表达式,如 a && b;。

5.逗号表达式语句:执行一系列表达式,从左到右计算,最后的表达式决定整个逗号表达式的值,如 a, b, c;。

6.函数调用表达式语句:调用函数并执行其代码,如 function();。

表达式语句的作用

表达式语句在C语言中的作用非常广泛,它们可以用来:

1.更新变量的值。

2.进行条件测试。

-控制程序的流程,如通过循环或分支结构。

-计算中间结果,这些结果可能用于后续的计算或决策。

示例

以下是表达式语句的示例:

注意事项

1.不是所有表达式都必须作为语句使用。例如,表达式可以用作其他表达式的一部分,或者作为函数的参数。

2.有些表达式可能没有明显的副作用,即它们计算值但不改变任何状态(如变量的值)。

3.在编写代码时,应当注意表达式语句的使用是否合理,以避免不必要的计算或隐藏的bug。

12.3 函数调⽤语句

函数调用语句用于请求执行一个已定义的函数。它通常包括函数名和实际参数列表,实际参数是在函数调用时传递给函数的值。函数调用语句以分号结束,并在执行后可能返回一个值。函数调用语句是实现模块化编程和代码重用的重要手段.

在编写C语言程序时,这些语句类型经常相互结合使用,以创建具有复杂逻辑和结构的程序。控制语句可以控制复合语句中的执行流程,而函数调用语句可以在程序的不同部分之间共享代码逻辑。

12.4 复合语句

复合语句在C语言中是由一对花括号 {} 包围的语句序列。这些语句可以包含变量声明、表达式计算、函数调用等,并且作为一个单一的语句单元被其他语句控制。

复合语句常用于控制语句的条件块或循环体内,以定义在特定条件满足时要执行的一系列操作。

12.5 控制语句

控制语句用于指导程序的执行流程,它们可以基于条件判断(如 if 和 switch)、循环执行(如 for、while 和 do-while)或无条件跳转(如 break、continue、goto 和 return)来改变正常的顺序。

控制语句使得程序能够根据不同的输入或计算结果采取不同的行动.

 十三.注释

在C语言中,注释是用来在代码中添加描述性文本,帮助程序员理解代码的意图和功能,而不会被编译器解释为程序指令的一部分。

C语言支持两种类型的注释:

1.单行注释:使用两个斜杠 // 开头,注释会一直持续到当前行的结尾。例如:// 这是一个单行注释,解释这一行代码的功能。

2.多行注释:使用 /* 开始,并以 */ 结束,可以跨越多行。例如:/*

这是一个多行注释,

可以跨越多行,

用于解释代码块的功能

*/

注释的使用

注释在代码中非常重要,它们可以:

1.解释代码的意图:描述为什么使用特定的代码逻辑或算法。

2.提高代码可读性:使其他开发者更容易理解代码的功能。

3.临时禁用代码:注释掉代码行可以暂时停止代码的执行,用于调试或测试目的。

注意事项

尽管注释对于代码的可读性和维护性至关重要,但也有一些使用时需要注意的事项:

1.保持注释的准确性:当代码修改时,确保注释也被相应更新,避免误导。

2.避免冗余注释:注释应提供额外的信息,而不是简单重复代码的功能。良好的变量命名和结构清晰的代码可以减少对注释的需求。

3.避免注释中的注释:在C语言中,注释内部的注释是无效的,因为注释本身就是一个整体。例如:/* 这是一个注释 /* 这不是注释 */ 这是注释的结束 */

C语言常见概念介绍完毕,如果是初学者,对所涉及的知识点大可不必深究,保持印象知道有这个东西即可。后续我会花费会更多的篇章持续性讲解。

  • 30
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值