C语言零基础入门级学习程序框架【系统学习第一天】
【1】 Hello World
配置部署好 vsCode 之后,就可以直接在上面写代码了,新建一个新的C程序文件,向屏幕输出一串字符 “Hello World!”,如下图所示:
下面,从整体上来分析一下这个最简单的C语言程序,将这个最简程序的各个部分剖析清楚,明白我们写下的每一个字符的具体含义。
【2】头文件的作用
#include <stdio.h>
C语言程序中,任何符号(包括变量和函数)的使用,都是需要提前声明的。 如果程序用到了系统库函数,那么就需要包含相应的系统头文件来进行声明。
上述代码中用到了库函数 printf,而这个函数的声明在头文件 stdio.h 中,因此在该程序中需要包含此头文件。
【3】声明的作用
概念:对源文件外定义的某个符号进行描述的过程,称为声明
作用:经过声明的符号,编译器才能正确识别和编译,否则编译器不认识,无法判定语法错误
符号:变量、函数等
示例:
// 声明一个变量符号number
int number = 100;
// 声明一个函数符号function
void function(int size, char *buf);
【4】main主函数的作用
1.主函数是必须有的,每一个C语言程序都有main函数,哪怕是空的。
2.主函数的名字是固定的,叫 main ,这个函数名不可被挪作他用。
3.主函数是程序的入口,也就是程序开始运行的地方。
主函数分解如下:
// int: 返回值类型,代表主函数最终的执行结果是一个整型数据
// main(void): main是函数名,这个名字不能变
// void是函数参数列表,可以省略
int main(void)
{
}
在 Linux 环境下,主函数 main 根据程序最终是否需要接收外部命令行参数,实际上有两个版本:
// 不接收外部命令行参数的版本
int main()
{
...
}
// 接收外部命令行参数的版本
int main(int argc, char **argv)
{
...
}
在初学阶段,可不必理会带外部参数的版本,等到学完数组和指针再回过来复习即可。
【5】printf函数
C语言被称为是一种面向过程的模块化语言,所谓的模块,值得是一个个功能明确、各司其职的封装函数,它们就像一块块积木,被合理有机地拼搭起来,形成复杂、健壮的程序。
在这之中,系统标准C库提供了非常多“模块”,printf 就是其中之一,它的功能就是:向终端输出一段指定格式的数据。
// 向终端输出一段字符串
printf("Hello World!\n");
格式输出控制符 概念:函数 printf
被称为格式化IO函数,因为它是按照指定格式来操作数据的。以常见的整数、浮点数和字符串为例,printf 函数相关的控制格式符如下所示:
// 格式化输出函数
printf();
// 根据需要输出不同格式的数据
printf("%d\n", 100); // 输出1个整数
printf("%d, %d\n", 100, 200); // 输出2个整数
printf("%f\n", 3.14); // 输出浮点数
printf("%c\n", 'x'); // 输出字符
printf("%s\n", "abcd"); // 输出字符串
printf("a=%d, %s\n", "abcd"); // 输出字符串
【6】格式控制符
语法点:
类似 %d、%f 被称为格式控制符
一个格式控制符对应一个数据
‘\n’ 是一个字符,表示回车符,详细 ASCII 码表参阅教案3。
格式控制符:
十进制整数:%d
八进制整数:%o
十六进制整数:%x
字符:%c
字符串:%s
单精度浮点数:%f
双精度浮点数:%lf
长双精度浮点数:%Lf
地址:%p
【7】 return语句
C语言中的关键字 return 的含义是结束一个函数,并返回某个数据(若有)。而具体到 main 函数中时,由于主函数 main 的结束同时也意味着整个程序的结束,因此在上述 Hello World 程序中 return 后整个程序就退出了。
int main()
{
... ...
// 一般而言,函数正常退出返回0,非正常退出返回非0
return 0;
}
一般而言,程序正常退出时,main函数返回值是0;当程序异常退出时,main函数返回值是非0。
注意: main函数的返回值是给上一级进程的,因此理论上讲在当前的单进程程序中,main函数的返回值究竟是多少都无所谓,因为根本没有去使用这个返回值,除非在多进程程序中,进程间才需要使用main函数的返回值来传递信息。
【8】 man帮助手册
编程开发的过程中,需要使用众多的系统指令、各类函数库、系统调用、各类系统脚本文件等,这些种类繁多、功能各异的信息,可以通过统一的man手册来获取第一手资料,man文档是帮助信息的权威通道,是大多数教程、书籍的知识来源。
由于 man 手册所需要罗列的帮助条目众多,因此 man 手册被妥善地分为9册,不同的帮助信息被放入对应的man分册中:
man文档的九个分册:
Shell命令(默认已安装)
系统调用
库函数
特殊文件(通常出现在/dev目录下)
文件的特殊格式或协定(例如/etc/passwd的格式)
游戏
杂项(例如一些宏定义)
系统管理员命令(通常只能由管理员执行)
非标准内核例程
【9】man手册的安装
在默认情况下,系统只安装第一册,其他的帮助信息一般需要用户自己手动安装,安装指令如下:
gec@ubuntu:~$ sudo apt install manpages
gec@ubuntu:~$ sudo apt install manpages-dev
gec@ubuntu:~$ sudo apt install manpages-posix
gec@ubuntu:~$ sudo apt install manpages-posix-dev
【10】man手册的查询
使用man手册查询命令、函数时,一般直接在man后面接上待查条目即可,但有时候会遇到同一个待查询的条目存在于多个man分册的情况,这就需要先罗列出该条目所在的分册信息,然后再根据需要去选择帮助文档的序号。
# 查询单一分册的条目:
gec@ubuntu:~$ man strcpy
# 查询存在于多个分册的条目:
# 先使用 -f 来查看有哪些分册包含了该条目
gec@ubuntu:~$ man -f printf
printf (1) - format and print data
printf (3posix) - print formatted output
# 根据需要,指定查询某一册帮助分册
gec@ubuntu:~$ man 3posix printf
注意:
按 q退出
【11】代码风格规范
缩进:凡是有代码块的地方都必须缩进,一对大括号 { } 代表一个代码块
空格:标点符号后面,一般加空格
空行:不同逻辑段落中间,一般加空行
符号命名:尽量能一望便知,做到顾名思义,避免使用无意义字符
// 示例代码
#include <stdio.h>
#include <stdlib.h>
int maxValue(int a, int b)
{
return a>b ? a : b;
}
int main(void)
{
int a;
int b;
int m = maxValue(a, b);
printf("最大值是: %d\n", m);
return 0;
}
【12】本章实例和问题解答[英文代码风格文档]
可以用DEV-C++、vc++、virtual studio等软件来写C语言程序吗?
答:可以。用什么IDE编辑编译C语言程序,理论上都是可以的,C语言的核心语法都是一样的,但由于嵌入式课程的核心技术之一是Linux,因此在Linux环境下编写C语言代码是最好的方式,推荐直接在Linux系统中写代码,或者在Windows 下安装带有Cygwin环境的 vsCode 都是可以的。
需要安装虚拟机吗?
答:可以,如果电脑硬件资源配置足够,安装虚拟机并在上面运行Linux系统直接进行C语言编程当然是可以的,在后续的嵌入式学习中,纯Linux的编程开发是必备的技能,只不过在初学C语言阶段,在电脑硬件配置不足的情形下,可以不必安装虚拟机的。
苹果电脑的vsCode怎么配置?
答:苹果电脑中的vsCode安装配置与windows的基本一样,要注意的是安装软件的格式不同,另外无需安装 cygwin。
英文代码风格链接:https://pan.baidu.com/s/1NEW6lM3BZhiG_NhL91qcNQ?pwd=s0lw
提取码:s0lw
每天不定时更新一个章节,按照先后顺序进行讲解,C语言是所有上层语言的鼻祖,正在学习这方面知识的小白,千万别错过了
【13】苹果笔记本安装VScode教程
安装vscode,点击下载
在下载界面,找到对应系统的版本。
2.苹果系统本身已经自带了C和C++的编译环境,因此可以直接在文件夹中创建源码文件,编辑并编译运行。编译的时候,右键点击文件,在弹出的菜单中点击“在终端中打开”:
在终端中,直接敲命令编译程序:
// 编译并运行C语言代码:
gcc a.c
./a.out
// 编译并运行C++代码:
g++ a.cpp
./a.out
【14】本章范例【vim快捷键】
第一题:使用 vsCode 编写一段代码,显示自己的学校和姓名。
//参考代码
#include <stdio.h>
int main()
{
printf("齐鲁大学:张三疯\n");
return 0;
}
第二题: 使用man手册查询系统调用fork函数的用法,并编写一个程序试试它的效果
解析
通过man手册查看fork函数的用法:
gec@ubuntu:~$ man fork
通过查阅代码,得知 fork
函数专用于创建一个新的进程,可以让原有的进程“分裂”成两个一模一样的进程,也就是有两个进程执行 fork
后续的代码。可以用下面的代码简单地验证这个结论:
参考代码
#include <stdio.h>
int main()
{
fork(); // 将本进程分裂为两个进程
printf("abcd\n"); // 该语句将被两个进程执行,打印两遍
return 0;
}
(基本编程环境的使用、基本程序入门)
【1】安装并部署好 vsCode 编程环境,并安装 vim 插件,试试使用 vi 模式编写代码。
解析
直接在 vsCode 中的扩展栏搜索 vim 安装即可。关于 vi 编辑器:
特点: vi的改进版本叫vim(vi’s improved version),vi和vim是同一个软件。
vi其初衷是解放鼠标,只用键盘高效操作所有的编辑任务。 没有菜单,操作分成编辑模式和命令模式,除了编辑之外的操作都在命令模式下进行。
模式切换: 从命令模式 切换到 编辑模式:按i、o、a、I、O、A均可 从编辑模式 切换到 命令模式:按Esc。
在编辑模式中,vi 就跟普通的编辑器一样
在命令模式中,可以输入如下命令操作文本:
(基本程序入门,帮助信息查询)
【2】通过查询本地man手册,或者在线帮助文档,了解格式控制输出函数的用法,编写程序实现:
输出123.456,并保留1位小数
输出十进制数100的十六进制形式,并附上十六进制数的前缀(即0x)
//参考代码:
#include <stdio.h>
int main()
{
printf("%.1f\n", 123.456);
printf("%#x\n", 100);
return 0;
}
【15】C语言在线帮助文档[离线版也有]
在这里拥有丰富的C语言资源,不管是小白还是大佬,都应该拥有
坚持间断性更新,直至所有课件讲完,第一天结束=