编程工具
工欲善其事,必先利其器。C语言是一门编译型的计算机语言,需要依赖编译器将计算机语言转换成机器能够执行的机器指令。那常见的C语言编译器都有哪些呢?
msvc、clang、gcc 就是一些常见的编译器,当然也有一些集成开发环境如:VS2022、XCode、CodeBlocks、DevC++、Clion 等。
集成开发环境(IDE)是用于提供程序开发环境的应用程序,一般包括代码编辑器、 编译器 、 调试器和图形用户界面等工具,是集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套装。简单来说,我们只要在Windows环境下安装好VS2022这一个软件,就具备了C程序开发的所有条件(VS2022集成了msvc编译器)。XCode则是MacOS平台的集成开发环境(集成了clang编译器)。
本笔记中的代码均由Windows环境下的VS2022软件实现。
优点:
- VS2022 是一个主流的集成开发环境,企业中使用较为普遍;
- 包含了:文本编辑器 + 编译器 + 调试器,功能强大;
- 直接安装即可使用,基本不用额外配置环境,上手容易;
- 默认中文界面,初学者友好。
缺点:
- 功能丰富,安装包大,占用空间多。
VS2022安装教程
Windows环境下推荐使用VS2022社区版,因其免费,使用方便,较为常见。
安装教程见B站鹏哥教程,链接: VS2022安装使用教程,Visual Studio 2022详细安装使用调试教程C语言编译器,C++编译器。
第一个C程序
安装VS2022,新建项目,并新建源文件(.c
文件)后,在源文件中写入以下代码:
#include <stdio.h>
int main()
{
printf("Hello, X战警。\n");
return 0;
}
Ctrl + F5 执行命令“开始执行(不调试)”,或点击软件上方工具栏“调试 - 开始执行(不调试)”。
输出结果:
Hello, X战警。
C:\code\gitee\learning-c\LearningC_1_general_concepts\x64\Debug\LearningC_1_general_concepts.exe (进程 43336)已退出,代码为 0。
按任意键关闭此窗口. . .
编译和链接
C语言是一门编译型计算机语言,C语言源代码都是文本文件,文本文件本身无法执行,必须通过编译器的翻译和链接器的链接,生成二进制的可执行文件,可执行文件才能执行。
C语言代码是写在以.c
为后缀的文件中的,要得到最终运行的可执行程序,中间要经过编译和链接2个过程。
一个工程一般会由多个源文件组成,每个源文件(.c
文件)单独经过编译器处理生成对应的目标文件(以.obj
为后缀的文件),多个目标文件和库文件经过链接器处理生成对应的可执行文件(.exe
文件)。
库函数
printf
转义字符
字符串和 \0
- 字符串的末尾隐藏一个 \0,\0 被认为是字符串的结束标志,体现在:
- 当打印字符串的时候,打印到 \0 就自动停止。
- 当求字符串长度的时候,也是统计到 \0 为止,即统计的是 \0 之前字符的个数。
代码示例:
#include <stdio.h>
#include <string.h> // string 字符串 头文件
int main()
{
char arr1[] = "abc";
char arr2[] = { 'a', 'b', 'c'};
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%zd\n", strlen(arr1)); // %zd
printf("%zd\n", strlen(arr2));
return 0;
}
注意,因为使用了求字符串长度的库函数strlen()
,所以开头引入了字符串相关库函数的头文件<strling.h>
,同时根据warning提示将打印%d
修改为打印%zd
。
warning C4477: “printf”: 格式字符串“%d”需要类型“int”的参数,但可变参数 1 拥有了类型“size_t”
请考虑在格式字符串中使用“%zd”
输出结果:
abc
abc烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫贴->1?
3
42
C:\code\gitee\learning-c\LearningC\x64\Debug\LearningC.exe (进程 43964)已退出,代码为 0。
按任意键关闭此窗口. . .
结果可以看到,字符串arr2
因为是由三个单独的字符变量构成,末尾并没有字符串结束符 \n,所以额外打印出了一串随机代码,字符串长度也相应统计成了42。
代码示例:
int main()
{
printf("%zd\n", strlen("c:\test\114\bbc"));
return 0;
}
输出结果:
10
C:\code\gitee\learning-c\LearningC\x64\Debug\LearningC.exe (进程 42452)已退出,代码为 0。
按任意键关闭此窗口. . .
注意,由于在字符串"c:\test\114\bbc"
中,\t
,\114
,\b
分别代表三个转义字符,因此字符串长度应为7+3=10,而不是15。
注释
代码记录
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
//printf("hello X战警\n"); // \n是换行
//printf("%d\n", 100); // %d 指整型,%d是占位符,会被后面的值替代
//printf("%c\n", 'X'); // %c 指字符,''单引号内是字符,""内是字符串
//printf("%f\n", 3.14); // %f 指单精度浮点型
//int a = 0;
//scanf("%d", &a); // scanf 键盘输入 库函数
//printf("a = %d\n", a);
ASCII
//printf("%c\n", 'z');
//printf("%c\n", 122); // 这两行命令都会输出字符z
//int i = 1;
//for (i = 32; i <= 127; i++)
//{
// printf("%c ", i);
//}
字符串和 \0
// 每个字符串后都有一个隐藏的 \0
//printf("abcdef\n");
//printf("%s\n", "abcdef"); // 打印字符串
//char arr1[] = "abc";
//char arr2[] = { 'a', 'b', 'c' };
//char arr3[] = { 'a', 'b', 'c', '\0' };
//printf("%s\n", arr1);
//printf("%s\n", arr2);
//printf("%s\n", arr3);
return 0;
}