1.4k 1 分钟

# 实验步骤 # 安装 RISC-V 的交叉编译器 sudo apt-get install gcc-riscv64-linux-gnu # 编写一个测试程序 # 生成 RISC-V 的汇编代码 riscv64-linux-gnu-gcc -S -o risc_test.s risc_test.c # 分析汇编代码 .file "risc_test.c" ; 原C代码文件名 .option nopic .text .align 1 .globl g ; g为全局符号 .type g, @function ;...
4.1k 4 分钟

# 宏和函数的区别 宏和函数的区别并不少,而且对于宏擅长的领域,函数其实是有些无能为力的。 # 元编程 从根本上来说,宏是通过一种代码来生成另一种代码,如果大家熟悉元编程,就会发现两者的共同点。 derive 属性会自动为结构体派生出相应特征所需的代码,例如 #[derive(Debug)] ,还有熟悉的 println! 和 vec! ,所有的这些宏都会展开成相应的代码,且很可能是长得多的代码。 总之,元编程可以帮我们减少所需编写的代码,也可以一定程度上减少维护的成本,虽然函数复用也有类似的作用,但是宏依然拥有自己独特的优势。 # 可变参数 Rust...
3.9k 4 分钟

# 前言 过程宏,它更像函数,接受一些代码作为参数输入,然后对他们进行加工,生成新的代码,他不是在做声明式宏那样的模式匹配。三种过程式宏都是这种思路。 过程宏分为三种: 派生宏(Derive macro):用于结构体(struct)、枚举(enum)、联合(union)类型,可为其实现函数或特征(Trait)。 属性宏(Attribute macro):用在结构体、字段、函数等地方,为其指定属性等功能。如标准库中的 #[inline]、#[derive (...)] 等都是属性宏。 函数式宏(Function-like...
11k 10 分钟

什么是编译器所谓编译原理,也就是编译器的工作原理,因此先要明白什么是编译器。编译器的基本定义是:将一门语言转换为另一门语言,一般指将高级语言转换为机器语言,但仅仅是转换并不执行。编译器最基本的底线,就是保证源代码和目标代码的语义相同。 在程序运行中的地位 如上图。编译器就是将源代码转换(即翻译)为目标程序,然后再交给机器去执行,这个应该很好理解。之所以要转换,是因为计算机本质上只能识别机器代码,不能识别高级语言 。简单解释一下这张图的各个部分。 “源代码”是 C java...
27k 24 分钟

# 服务注册 服务进程是在注册中心注册自己的元数据信息,通常包括主机和端口号,有时还有身份验证信息,协议,版本号,以及运行环境的信息 本系统中包含了以下内容: 创建 Web 服务 创建注册服务 注册 Web 服务 取消注册 Web 服务 # 创建日志服务 在正式实现服务注册的功能之前,先实现日志服务,在项目文件夹下创建一个 log 文件夹,存放定义日志逻辑的代码 # 编写日志服务逻辑 日志服务是一个 WEB 服务,功能是接收 web 请求,将 POST 请求的内容写入到 log,注意这里对标准的 log 包起了别名 stdlog,因为后续要自定义一个 Logger 对象 log: //...
322 1 分钟

一,生成密钥,或者在购买服务器时选择 ssh 密匙登录 第一种:通过指令 ssh-keygen 生成,具体的我就不说了 第二种:通过服务商生成,阿里云,腾讯云,华为云的网站有创建密钥的,比如腾讯云 二,将密钥绑定到服务器,也可以在网站直接操作,修改密码为密钥就好了 三,在 vscode 上安装 Remote Development 插件,然后将几个扩展包也安装一下 四,点击远程资源管理器 五,点击 + 号在输入框输入 ssh 登录名 @IP 地址 六,输入完成后按回车会出现选择选择,选择 C:User\XXX.ssh\config 上面三条是自动生成的,Host...
1.4k 1 分钟

# auto&&decltype 静态类型:类型检查在编译阶段 动态类型:类型检查在运行阶段 auto 声明变量的类型必须由编译器在编译时期推导而得,其优势是在拥有初始化表达式的复杂类型变量声明时简化代码。 decltype 以一个普通的表达式为参数,返回该表达式的类型。 用 decltype (e) 来获取类型时,编译器将依序判断以下四规则: 如果 e 是一个没有带括号的标记符表达式或者类成员访问表达式,那么 decltype (e) 就是 e 所命名的实体的类型。如果 e 是一个被重载的函数,则会导致编译时错误。 否则,假设 e 的类型是 T,如果 e...
4.8k 4 分钟

# 继承构造函数 如果基类有多个构造函数,使用继承构造函数可以让派生类免于重写各个基类的构造函数。 struct A { A(int i) {} A(double d, int i) {} A(float f, int i, const char *c) {} // ...};struct B : A { using A : A; // 继承构造函数 // ...}c++11...
3.1k 3 分钟

# 查验机器环境 #include <iostream>using namespace std;int main() { cout << "Standard Clib: " << __STDC_HOSTED__ << endl; cout << "Standard C: " << __STDC__ << endl; // cout...
362 1 分钟

# Quick Start Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. # Create a new post h$ hexo new "My New Post"More info: Writing # Run server h$...