配置部署好 vsCode 之后,就可以直接在上面写代码了,新建一个新的C程序文件,向屏幕输出一串字符 “Hello World!”
下面,从整体上来分析一下这个最简单的C语言程序,将这个最简程序的各个部分剖析清楚,明白我们写下的每一个字符的具体含义。
#include <stdio.h> // 告诉编译器在.h文件中(声明)有这么一个符号,你需要去其相应的.c文件里去找其源文件(实现(定义))
C语言程序中,任何符号(包括变量和函数)的使用,都是需要提前声明的。
如果程序用到了系统库函数,那么就需要包含相应的系统头文件来进行声明。
上述代码中用到库函数printf,而这个函数的声明在头文件 stdio.h 中,因此在该程序中需要包含此头文件。
作用:经过声明的符号,编译器才能正确识别和编译,否则编译器不认识,无法判定语法错误
extern int number;
extern void function(int size, char *buf);
主函数是必须有的,每一个C语言程序都有main函数,哪怕是空的。
主函数的名字是固定的,叫 main ,这个函数名不可被挪作他用。
// int: 返回值类型,代表主函数最终的执行结果是一个整型数据
// void: 是函数参数列表,可以省略,表示空的意思,就是没有参数的意思
int main(void) { ........ } 在 Linux 环境下,主函数 main 根据程序最终是否需要接收外部命令行参数,实际上有两个版本: // 不接收外部命令行参数的版本 int main(void) { ... } // 接收外部命令行参数的版本 int main(int argc, char **argv) { ... }
C语言被称为是一种面向过程的模块化语言,所谓的模块,指得是一个个功能明确、各司其职的封装函数,它们就像一块块积木,被合理有机地拼搭起来,形成复杂、健壮的程序。
在这之中,系统标准C库提供了非常多“模块”,printf 就是其中之一,它的功能就是:向终端输出一段指定格式的数据。
概念:函数 printf 被称为格式化IO函数,因为它是按照指定格式来操作数据的。以常见的整数、浮点数和字符串为例,
// 头文件 #include <stdio.h> // 主函数 int main(void) { // 1、没有格式控制符的printf函数 printf("hello world!\n"); // 2、打印整型数 int num1 = 100; printf("num1(10进制) = %d \n", num1); // 3、打印八进制数 int num2 = 100; printf("num2(8进制) = %o \n", num2); // 4、打印十六进制数 int num3 = 100; printf("num3(16进制) = %x \n", num3); // 5、打印字符 char ch1 = 'a'; int ch2 = 100; printf("ch1 = %d \n", ch1); // 打印出对应的ascll码表的数值 printf("ch2 = %c \n", ch2); // 打印的是asccll码表数值对应的字符 // 6、打印字符串(一串字符,后面加'\0') char *buf1 = "shijienameda,woxiangqukankan!"; // 指针buf1存放了字符串的首字符的地址('s'的地址) char buf2[128] = "nihao,woshiniqingge"; // 数组buf2存放了字符串里的所有字符 printf("buf1 = %s \n", buf1); // printf函数从buf1存放的地址,跳到常量区里的字符串,将其字符打印出来,一直到遇到'\0'为止 printf("buf2 = %s \n", buf2); // 直接打印buf里的内容,知道遇到'\0'为止 // 7、打印单精度浮点型数 float f1 = 3.14; // 小数3.14默认在系统中以double数据类型(默认64位系统,64位精度值)来存储 printf("f1 = %f \n", f1); // 如果你用float型来存放小数3.14,它只存放32的精度值 // 8、打印双精度浮点型数 double f2 = 3.14; printf("f2 = %lf \n", f2); if (f1 == 3.14) // if(f1 == f2) // 这里之所以不相等,是因为两个比较的数,其精度不一致 { printf("f1等于f2!\n"); } else { printf("f1不等于f2!\n"); } // 9、打印地址 printf("num1 = %p\n", num1); // 里面存放的数值为十进制100,打印的时候将其以16进制方式打印出来为0x64(地址是以十六进制的方式打印出来的) printf("num1 = %p\n", &num1); // 存放数值100的num1变量的地址 return 0; }
‘\n’ 是一个字符,表示回车符,详细可见ASCII 码表。
printf("\033[40;32m《医疗挂号信息管理系统》\n");
\033[x;yH // 定位光标(x:横轴坐标, y:纵轴坐标)
C语言中的关键字 return 的含义是结束一个函数,并返回某个数据(若有)。而具体到 main 函数中时,由于主函数 main 的结束同时也意味着整个程序的结束,因此在上述 Hello World 程序中 return 后整个程序就退出了。
int main() { ... ... // 一般而言,函数正常退出返回0,非正常退出返回非0 return 0; }
一般而言,程序正常退出时,main函数返回值是0;当程序异常退出时,main函数返回值是非0。
注意,main函数的返回值是给上一级进程的,因此理论上讲在当前的单进程程序中,main函数的返回值究竟是多少都无所谓,因为根本没有去使用这个返回值,除非在多进程程序中,进程间才需要使用main函数的返回值来传递信息。
编程开发的过程中,需要使用众多的系统指令、各类函数库、系统调用、各类系统脚本文件等,这些种类繁多、功能各异的信息,可以通过统一的man手册来获取第一手资料,man文档是帮助信息的权威通道,是大多数教程、书籍的知识来源。
由于 man 手册所需要罗列的帮助条目众多,因此 man 手册被妥善地分为9册,不同的帮助信息被放入对应的man分册中:
在默认情况下,系统只安装第一册,其他的帮助信息一般需要用户自己手动安装,安装指令如下:
gec@ubuntu:~$ sudo apt install manpages
gec@ubuntu:~$ sudo apt install manpages-dev
使用man手册查询命令、函数时,一般直接在man后面接上待查条目即可,但有时候会遇到同一个待查询的条目存在于多个man分册的情况,这就需要先罗列出该条目所在的分册信息,然后再根据需要去选择帮助文档的序号。
printf (1) - format and print data
printf (3) - print formatted output
https://zh.cppreference.com/w/%E9%A6%96%E9%A1%B5
不能跟系统已有的关键字重名,也不能跟本命名空间(namespace)中具有相同作用域的其他标识符重名。
二合一法: Fang_Hui_Qing或Fang_HuiQing
int led_num = 0; // 下划线命名法,小写 int led_flag = 0;
#define LED_ON // 下划线命名法,大写
2、缩进:凡是有代码块的地方都必须缩进,一对大括号 { } 代表一个代码块
#include <stdio.h> int num = 1000; // 全局变量是另一个作用域,可以(注意:不同作用域,变量名相同,会优先使用最近的作用域)
// 5、凡是有代码块的地方都必须缩进,一对大括号 { } 代表一个代码块 // 普通函数(初始化LED灯) void LED_Init(void) { int led_num1 = 1; int led_num2 = 1; printf("LED Init\n"); // 这是一个代码块,不要贴墙,要有缩进(一个tab键(建议), 或者4个空格(太麻烦)) // 6、不同逻辑段落中间,一般加空行 led_num1 = 0; led_num2 = 0; printf("LED UnInit\n"); } // 普通函数(比较大小) int Max_OfTwoValue(int a, int b) { return a>b ?a:b; } // 主函数 int main(int argc, char const *argv[]) { // 1、- 只能包含数字、字母以及下划线,不能包含其他任何特殊字符。 int give_you_little_color_to_see_see_100000 = 100; // 可以 // int aaa_111_&&& = 200; // 不可以 // 2、只能以字母或者下划线开头 int _______nihao888 = 300; // 可以 int nihao888______ = 400; // 可以 // int 888nihao______ = 500; // 不可以 // 3、不能跟系统已有的关键字重名,也不能跟本命名空间(namespace)中具有相同作用域的其他标识符重名 // int int = 600; // 不可以 int num = 700; // 可以 // int num = 800; // 同一命名区,再写了一个num,不可以 { int num = 900; // 使用{}括起来的,就是另外一个作用域,可以 printf("num = %d\n", num); } printf("num = %d\n", num); // 4、尽量能一望便知,做到顾名思义,避免使用无意义字符 int long_time_no_see = 1100; // 英文、中式英文也是可以的,能望文生义即可 int fanggongnizhenshuai = 1200; // 拼音不行,会有歧义(比如:方工你真帅!!!(方工你真衰!!!) ) // 5、6 LED_Init(); // 7、标点符号后面,一般加空格 int a = 1300; int b = 1400; int max = 0; max = Max_OfTwoValue(a, b); printf("max = %d\n", max); return 0; }
标签:__,函数,int,C语言,001,printf,033,main,man From: https://www.cnblogs.com/KanGIaJee/p/18235162