vscode常用插件:
chinese
c/c++
Doxygen Documentation Generator
Bracket Pair Colorizer2
Remote - SSH
secureCRT远程连接虚拟机
菜单->快速连接
协议:SSH2
主机名: 就是Ubuntu的IP地址(使用指令ifconfig)
用户名: china
linux常用指令
cd 切换路径
格式:
cd 路径名(或叫文件夹或叫目录)
例:
cd /mnt/hgfs/
cd share/
路径说明:
在linux中,文件系统以目录树的结构组织
目录树的根就是一个 /, 所有的路径都从这个根目录开始
把这种以/开始的路径,称为绝对路径,例: /mnt/hgfs/share/
不是以/开始的路径,称为相对路径,例: share/
在路径中,除了第一个/叫根目录,其他的/称为路径分隔符
有一些路径用特殊的符号表示:
~ 表示家目录,例: cd /home/china
. 表示当前目录,例: cd ./
.. 表示上一级目录,例:cd ../
- 表示上一次所在目录 例: cd -
pwd 打印当前的路径名
ls 列举指定目录下的文件名
格式:
ls
ls 路径名
ls -l (-l选项 用于列出文件的详细信息)
clear 清屏(ctrl+l)
使用指令man, 可以查看指令或函数的详细情况。
查指令:
man -f 指令名
例:
man ls
查函数
man -f 函数名 (-f用来查看函数在手册的哪一节)
man [章节名] 函数名 ([]里面的内容表示可选)
测试环境
编写代码
windows+vscode ,假设文件名为 hello.c ,保存于共享目录
编译代码
ubuntu18.04 + gcc
切换到linux,进入共享目录,用ls找到hello.c , 编译
cd /mnt/hgfs/share (进入共享目录)
gcc hello.c -o hello (编译)
执行程序
./hello
编译说明:
C和C++属于编译型语言,代码编写完成后,必须使用编译器进行编译。
所谓编译,就是把人能看懂的程序代码,翻译成 机器能看懂的 机器语言(二进制)
担任"翻译"角色的工具,就是所谓的编译器
我们在linux中主流使用的C语言编译器是gcc
gcc 编译C程序的最一般的指令:
gcc 点C文件名 -o 二进制可执行文件名
例:
gcc hello.c -o hello
编码规范
1、一条语句占一行
int a;
int b;
2、代码块之间要有空行隔开
#include <stdio.h>
// 此处有空行
int main()
{
for() {}
// ...
for() {}
}
3、{}代码块要有缩进,缩进使用一个tab键(4个空格)
if (...)
{
// 往右缩进
}
4、括号要成对写,且每个大括号要单独占一行,且垂直与关键字对齐
for ()
{
for ()
{
if ()
{
}
}
}
5、代码要写注释,C支持两种注释方式
// 注释
/*注释*/
6、代码中的类型名、变量名、函数名 要做到 "见名知其义"
7、关于空格
运算符两边建议有空格
逗号、分号后面建议有一个空格
for (int i = 0; i < 100; i++)
{
}
....
练习:
写一个C程序,求1-100之间所有的偶数的和。
数据类型
计算机是用来解决实现生活中问题的工具
计算机通过把"问题域"中的数据按某种方式保存起来,然后对保存的数据进行各种操作,从而得出结果。
计算机首先要解决数据的保存问题,在数据保存之前,得知道这个数据的大小、取值范围、支持的操作...
那么,数据的大小、取值、支持的操作 等属性,就是 数据类型 所要讨论的问题。
1、数据类型
在C语言中,有如下类型
1、基本类型(内置类型)
整数类型
char / unsigned char
short / unsigned short
int / unsigned int
long / unsigned long
以上类型都是用来保存整数的,区别如下
1、signed 和 unsigned
signed表示有符号符数
有符号既能表示正数,也能表示负数
unsigned表示无符号数
只能表示正数,但能表示更大的数
2、所占空间大小不同
char 占一个字节
unsigned char 也占一个字节
...
一般来说,类型所占大小,由操作系统和编译器共决定
如果是在x86(即32位编译环境)平台下,一般:
一个short占用2个字节,一个int占用4个字节,一个long也占用4个字节
标准C提供了一个运算符sizeof(), 用来计算某种类型的值所占用的存储空间字节数
sizeof(char) == 1
sizeof(short) == 2
sizeof(int) == 4
sizeof(long) == 4
C标准规定如下:
sizeof(long) >= sizeof(int) >= sizeof(short) >= sizeof(char)
注:
我们使用的ubuntu18.04是64位的系统,其中内置的gcc编译器,是64位的编译器
sizeof(long) == 8
sizeof(char*) == 8
练习:
char、short、int、long 有符号和无符号的取值范围分别是多少?
例:
unsigned char: 0-255
unsigned short: 0-65535
unsigned int : 0-2^32-1
浮点数类型
float 单精度浮点数
double 双精度浮点数
long double 长双精度浮点数
以上浮点数类型的区别
1、所占空间不同
sizeof(float) == 4
sizeof(double) == 8
sizeof(long double) == ? (写代码验证)
2、保存的精度不同
C标准规定:
float必须至少能表示6位有效数字
double必须至少能表示10位有效数字
long double要保证至少一double类型的精度一致。
在C语言中,浮点数默认使用的是double类型
例:
3.14 默认就是double
3.14f 这才是float
2、构造类型
数组
一组相同元素的集合
例:
double scores[70];
结构 struct
当单个变量和数组都无法满足需求时,可以使用struct来自定义数据类型
例:
struct Student
{
char name[20];
double score;
};
联合(共用体) union
联合是一种数据类型,它能在同一块内存空间中存储不同的数据类型,但不是同时存储,同一时刻只能用其中一种解释。
例:
union Type
{
double d;
int a;
char c;
};
枚举 enum
主要用于提高程序的可读性,它能声明一组符号来表示整型常量。
例:
enum Color {RED=0XFF0000, GREEN=0X00FF00, BLUE=0X0000FF};
3、指针类型
指针是一个值为内存地址的变量,指针变量的类型,就是指针类型
例:
int a = 10;
int* p = &a;
4、void类型
void在C语言中有三种用途
1、任意指针/通用指针/万能指针
void*
2、做为函数参数,表示该函数不接受任何参数
int foo(void)
{
}
foo(1); // error
3、做为函数返回类型,表示该函数不返回任何数据
void bar()
{
}
int r = bar(); // error