【C语言笔记】第一篇 C语言常见概念

引言:编程是不断的对这个现实世界中的问题建立模型并将其固化为代码自动化执行的过程。

 1.1编译和链接

C语言是一⻔编译型计算机语言,C语言源代码都是文本文件,文本文件本身无法执行,必须通过编译器翻译和链接器的链接,生成二进制的可执行文件,可执行文件才能执行。(计算机能够识别的是二进制指令)

C语言代码是放在 .c 为后缀的文件中的,要得到最终运行的可执行程序,中间要经过编译和链接2个过程。

一个工程一般都会有多个源文件组成,如下图所示,演示了源程序经过编译器和链接器处理的过程。

链接后的exe文件存在于:项目 - x64 - Debug - 项目.exe (不同情况存储位置也不同)

注:
1. 每个源文件(.c)单独经过编译器处理生成对应的目标文件(.obj为后缀的文件)
2. 多个目标文件和库文件经过链接器处理生成对应的可执行程序(.exe文件)

.c 后缀为源文件 (函数实现)

.h 后缀为头文件 head (一般放函数的声明、类型的声明、头文件的包含)

1.2 编译器的对比

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

C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。

常见的C语言编译器:MSVC、Clang、GCC 就是一些常⻅的编译器,当然也有一些集成开发环境如:VS2022、 XCode、CodeBlocks、DevC++、Clion等。( mscv、clang、gcc都是通过命令来编译代码,不方便)

集成开发环境(IDE)用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用戶界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。image.png

• VS2022 集成了MSVC(安装报包较大一些,安装简单,无需多余配置,使用起来非常方便)

• XCode 集成了clang(苹果电脑上的开发工具)

• CodeBlocks 集成了gcc(这个工具比较小众,需要配置环境,不太推荐)

• DevC++ 集成了gcc(小巧,但是工具过于简单,对于代码⻛格的养成不好,一些竞赛使用)

• Clion 是默认使用CMake,编译器是可以配置的(工具是收费,所以暂时不推荐大家使用)

VS2022安装教程

VS2022的优点:

• VS2022 是一个主流的集成开发环境,企业中使用较为普遍

• VS2022 包含了:编辑器+编译器+调试器,功能强大 

• 直接安装即可使用,基本不用额外配置环境,上手容易

• 默认界面是中文的,初学者友好

VS2022的缺点:

• 功能丰富,安装包大,占用空间多。

VScode - 编译器 可以装插件编译C/C++的代码,也可以适用于其他语言,但是不建议初学者使用,环境配置成本太高。

VS项目和源文件、头文件介绍

VS2022的操作面板:视图 - 解决方案资源管理器(新建源文件/头文件使用)

.c 后缀为源文件 (函数实现)

.h 后缀为头文件 head (一般放函数的声明、类型的声明、头文件的包含)

源文件添加:源文件 - 右键 - 添加 - 选择C++ - 改后缀为.c - 添加(选择语法来编译,如果是c++,那么会用c++的语法来编译)

输出模式配置:项目右键 - 属性 - 链接器 - 系统 - 子系统 - 选择控制台

背景颜色修改:工具 - 选项 - 环境(颜色主题可以选择风格)- 字体和颜色 - 字体:Cascadia Mono Light;项背景:RGB 204 232 207 ;色调饱和度亮度 84 91 205(护眼绿)

运行项目:ctrl+F5 / fn+ctrl+F5 多行注释:ctrl+K ; ctrl+C 取消注释:ctrl+K ; ctrl+U

1.3 main函数

main函数称为主函数,也称为“程序的入口”,所有代码都是从main函数开始执行(C语言代码不能没有main函数,否则就不知道从哪里开始执行,也不能存在多个main函数)

#include <stdio.h>

int main() 
{
    printf("hello C\n");
    printf("ha ha\n");
    return 0; 
}

void main() 写法也是正确的,但是属于过时的写法 int main(void) ,表示main函数没有参数,默认不写也可以

1.4 printf和库函数

printf 是一个库函数,它的功能是在标准输出设备(一般指屏幕)上进行信息的打印。

printf = print + format 按照格式打印数据,它属于库函数,专门用来打印数据的。指C语言本身提供给我们使用的函数,使用库函数,就需要引用,#代表指令形式,即 #include 表示包含一个名字叫做stdio.h的文件。

含义 std(standard) - 标准 i - input 输入 o - output 输出

库函数概念:为了不再重复实现常⻅的代码,让程序员提升开发效率,C语言标准规定了一组函数,这些函数再由不同的编译器厂商根据标准进行实现,提供给程序员使用。这些函数组成了一个函数库,被称为标准库,这些函数也被称为库函数。在这个基础上一些编译器厂商可能会额外扩展提供部分函数(这些函数其他编译器不一定支持)。

C语言不提供这些函数,但是提供标准,编译器厂商根据标准实现这些函数,所以printf、scanf…函数是编译器厂商提供的(VS-微软 Xcode-苹果),这些函数集成在一起被称为标准库,即库函数。

1.5 字符和ASCII编码

在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语言中字符是用单引号括起来的,如:'a','b','@'。

如果我们每个人自己给这些字符中的每个字符编一个二进制序列,这个叫做编码,为了方便大家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了一个标准ASCII编码,C语言中的字符就遵循了ASCII编码的方式。

关于ASCII常出现的考题

• 字符A~Z的ASCII码值从65~90
• 字符a~z的ASCII码值从97~122
• 对应的大小写字符(a和A)的ASCII码值的差值是32(小写字母ASCII值 - 32 = 大写字母ASCII值)
• 数字字符0~9的ASCII码值从48~57
• 换行 \n 的ASCII值是:10
• 在这些字符中ASCII码值从0~31,这32个字符是不可打印字符,无法打印在屏幕上观察。

ASCII码值也可以用%c字符占位符来打印

#include <stdio.h>
int main()
{
    printf("%c\n", 'Q');
    printf("%c\n", 81); //这里的81是字符Q的ASCII码值,也是可以正常打印的
    return 0;
}

ASCII码值打印代码

#include <stdio.h>
int main()
{
    int i = 0;
    for (i = 32; i <= 127; i++)
    {
        printf("%c ", i);
        if (i % 16 == 15)
            printf("\n");
    }
    return 0;
}

 1.6 注释

注释是什么?为什么要写注释?

  • 注释是对代码的说明,编译器会忽略注释,也就是说,注释对实际代码没有影响。

  • 注释是给程序员自己,或者其他程序员看的。

  • 好的注释可以帮我们更好的理解代码,但是也不要过度注释,不要写没必要的注释。

  • 当然不写注释可能会让后期阅读代码的人抓狂。

  • 写注释一定程度上反应了程序作者的素质,建议大家写必要的注释,在未来找工作的时候,写代码时留下必要的注释也会给面试官留下更好的印象。

  • 代码中有不需要的代码可以直接删除,也可以注释掉。

  • 代码中有些代码比较难懂,可以加一下注释文字。

 注释的两种风格

C语言风格的注释 /*xxxxxx*/

这种注释可以插入到行内,但是不能嵌套注释,因为一个开始符号,必须对应一个结束符号,它也可以在一行命令行中添加。

/*C语言风格注释
int Sub(int x, int y)
{
    return x-y;
}
*/

int fopen(char* s /* file name */, int mode);

 /* file name */ 用来对函数参数进行说明,跟在它后面的代码依然会有效执行。这种注释一定不能忘记写结束符号 */ ,否则很容易导致错误。

注释会被替换:编译时,注释会被替换成一个空格,所以 min/* 这里是注释*/Value 会变成 min Value ,而不是 minValue 。

C++风格的注释 //

可以注释一行也可以注释多行,可以用于说明,或者删除暂时不想要执行的代码。

int main()
{
    //C++注释风格
    //int a = 10;
    //调用Add函数,完成加法
    printf("%d\n", Add(1, 2));
    return 0;
}

1.7 常见关键字

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

• 关键字都有特殊的意义,是保留给C语言使用的。

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

关键字也是不能自己创建的。

C语言常见的关键词如下:

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

注:在C99标准中加入了 inline 、 restrict 、 _Bool 、 _Comploex 、 _Imaginary 等关键字。

auto自动创建,自动销毁,例如 auto int a = 10; 可以省略auto 写作 int a = 10;

contiune、break通常和for;while;do while;break一起使用;

const 常属性(不能被改的)

union 联合体

extern 声明外部符号的

register 寄存器

电脑上的存储设备:寄存器(集成到CPU上)、高速缓存、内存、硬盘
四者存在金字塔结构(寄存器为金字塔尖),越往金字塔尖,读写速度越快,空间越小,造价越高;
CPU中央处理器,早期内存的数据拿到CPU里来计算;现代,CPU处理速度越来越快,内存跟不上,那么寄存器就可以和CPU传递数据,让内存进入到高速缓存,高速缓存数据进入到寄存器,即寄存器是为了保证数据处理速度,提高效率。
如果数据大量、频繁使用,则可以放在寄存器当中。(现在的编译器已经非常聪明了,有时候不用register,编译器也会把数据放进去)

//register 寄存器
int main()
{
	register int num = 3; 
    //register建议3存放在寄存器中,让数据读写更快一些
    //但只是建议,最终还是编译器说了算,如果数据大量、频繁使用,则可以放在寄存器当中
    //目前的编译器已经非常聪明,可以区分放入寄存器的内容
	return 0;
}

signed 有符号的(int整型变量默认会带上signed,因此正数整型可以不写);

unsigned 无符号的;

static 静态的(用来修饰函数变量)

typedef 类型重命名

void 无(函数的返回类型,函数参数)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值