完整教程:嵌入式软件架构师之有趣的魔法代码:1+1到底等于几?
魔法架构师
写在前面
首先事先声明,我写文章的目的是分享和共同学习,如果你感兴趣,关注即可。我也终于开始写嵌入式软件架构设计的正文(希望我可以坚持)。
有趣的开始
本人希望以一个有趣的方式打开知识传播的大门,让枯燥的工作也能是一件有趣的事情。作为一个嵌入式软件架构师,本人需要用魔法赋予代码灵魂,这样代码就会听从我的指挥,在工作的时候不再孤身一人,而是代码与你并肩作战。 文章描述的是一个有趣的编码思维,请务必耐心看完, 接下来请和我一起走进嵌入式软件架构师的魔法世界吧!
本文将用一个简单的计算两个数的和的函数,来证明嵌入式软件架构师的魔法世界是存在的,代码也不是死板的文字,而是可以和架构师对话和交流,在调用接口的时候,魔法架构师是可以随意控制接口的行为的,在魔法架构师的世界里,1+1是可以不等于2的。
提示:本文的代码有使用Googletest开源库。
代码示例:
接下来通过调用一个简单接口来展示架构师的魔法能力!
头文件:add_code.h
#ifndef ADD_CODE_H
#define ADD_CODE_H
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief 计算两个数的和:a + b
* @note 通过一个简单的函数向大家分享代码也可以玩魔法。
* @param a [in] - 第一个加数
* @param b [in] - 第二个加数
* @return unsigned int result - 返回计算结果
*/
unsigned int add_code(const unsigned int a, const unsigned int b);
#ifdef __cplusplus
}
#endif
#endif
函数定义:add_code.c
#include "add_code.h"
unsigned int add_code(const unsigned int a, const unsigned int b)
{
/**
* @brief 此处返回两个数相加的结果。
* @note 如果您怀疑我作弊,请留言(留下邮箱)索取源码自己验证;
* @note 如果您对魔法代码感兴趣,请留言(留下邮箱)索取源码自己玩;
* @note 欢迎高手解密魔法,请留言进行代码破解;
* @note 最后,我的本意是分享,互相学习,共同进步,欢迎来到嵌入式软件架构师的世界。
*/
return a + b;
}
调用接口
调用接口的代码:magic_show.cpp
先看一个没有魔法的接口调用:
TEST(magic_show, normal_code)
{
/**
* @brief 这是一个正常的接口调用示例,1 + 1 = 2 !
*
*/
unsigned int num = add_code(1, 1);
std::cout << "num = " << num << std::endl;
}
运行结果:num = 2 代表 1+1=2
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from magic_show
[ RUN ] magic_show.normal_code
num = 2
[ OK ] magic_show.normal_code (1 ms)
[----------] 1 test from magic_show (1 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (2 ms total)
[ PASSED ] 1 test.
调用接口让1+1=0,上魔法代码:
注:魔法代码和常规代码是有差别的,可以自行找茬哈。。。
TEST_F(MagicCode1, one_and_one_will_not_be_two)
{
/**
* @brief 魔法1:1 + 1 != 2,有趣吧?
* @note 架构师拥有的魔法力量可以颠倒黑白,架构师使用魔法让 1 + 1 = 0 !
*/
unsigned int num = add_code(1, 1);
std::cout << "num = " << num << std::endl;
}
运行结果:num = 0,表示魔法生效:
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from MagicCode1
[ RUN ] MagicCode1.one_and_one_will_not_be_two
num = 0
[ OK ] MagicCode1.one_and_one_will_not_be_two (1 ms)
[----------] 1 test from MagicCode1 (2 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (7 ms total)
[ PASSED ] 1 test.
调用接口让1+1=任意值,上魔法代码:
TEST_F(MagicCode2, one_and_one_will_be_anything)
{
/**
* @brief 魔法2:1 + 1 的无限可能
* @note 架构师拥有的魔法力量可以颠倒黑白,架构师使用魔法控制接口的返回值 !
* @warning 返回-1表示魔法魔法耗尽。
*/
{
unsigned int num = add_code(1, 1); // 每次调用接口都可以返回不同的结果呢!
std::cout << "num = " << num << std::endl;
}
{
unsigned int num = add_code(1, 1); // 每次调用接口都可以返回不同的结果呢!
std::cout << "num = " << num << std::endl;
}
{
unsigned int num = add_code(1, 1); // 每次调用接口都可以返回不同的结果呢!
std::cout << "num = " << num << std::endl;
}
}
运行结果:num = 每次都不一样的数,表示魔法生效:
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from MagicCode2
[ RUN ] MagicCode2.one_and_one_will_not_be_anything
num = 500
num = 900
num = 1000
[ OK ] MagicCode2.one_and_one_will_be_anything(10 ms)
[----------] 1 test from MagicCode2 (10 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (11 ms total)
[ PASSED ] 1 test.
调用接口让1+1=接口真实返回值 + 1,上魔法代码:
TEST_F(MagicCode3, one_and_one_will_add_more)
{
/**
* @brief 魔法2:1 + 1 的无限可能
* @note 架构师拥有的魔法力量可以颠倒黑白,架构师使用魔法控制接口的返回值 !
* @warning 返回-1表示魔法魔法耗尽。
*/
{
unsigned int num = add_code(1, 1); // 每次调用接口都可以返回比真实返回值 + 1的数呢!
std::cout << "num = " << num << std::endl;
}
{
unsigned int num = add_code(1, 2); // 每次调用接口都可以返回比真实返回值 + 1的数呢!
std::cout << "num = " << num << std::endl;
}
{
unsigned int num = add_code(1, 100); // 每次调用接口都可以返回比真实返回值 + 1的数呢!
std::cout << "num = " << num << std::endl;
}
}
运行结果:num = 真实返回值 +1,表示魔法生效:
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from MagicCode3
[ RUN ] MagicCode3.one_and_one_will_add_more
num = 3
num = 4
num = 102
[ OK ] MagicCode3.one_and_one_will_add_more (7 ms)
[----------] 1 test from MagicCode3 (8 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (8 ms total)
[ PASSED ] 1 test.
更多关于“1+1等于几”的魔法代码将会持续更新。。。请关注!
魔法代码的实战意义
作为一个嵌入式软件架构师,在日常工作当中,随意控制接口的行为的能力太重要了:
- 当你开发串口协议需要控制read函数的数据来快速调试业务;
- 当你需要控制电池电量为0,或者控制电池充电充满的状态;
- 当你依赖的队友开发进度滞后;
- 当你需要测试open函数返回失败的代码分支;
- 当你需要把rtos或者裸系统单片机的代码运行在Linux x86来开发和调试;
- 当你开发的代码被队友改错;
- 当你想做一个公共的产品通用SDK,需要在不修改SDK代码的基础上去无限开发定制功能;
篇幅有限,文章并未展示全部代码!
如果你有任何疑问或者希望拿到魔法源码进行验证或者学习,请留言你的邮箱,我将会把源码发送至你的邮箱。
如果你是超级大牛,也希望可以看到你的分享,共同学习和进步,给我留言。
希望可以得到您的点赞收藏加关注,共同学习。
======================================================
浙公网安备 33010602011771号