首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Shell编程看懂到看开③(函数、echo、printf、test)

@TOC函数自定义函数linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。...() 定义,不带任何参数==必须在调用函数地方之前,先声明函数==,shell 脚本是逐行运行。...return的返回值只能是0~255之间的一个整数调用函数仅使用其函数名即可,不需要括号接下来我们使用函数完成两数的加和:无return版:图片图片有return版:图片图片$?...仅对其上一条指令负责,一旦函数返回后其返回值没有立即保存入参数,那么其返回值将不再能通过 $? 获得。函数参数在Shell中,调用函数时可以向其传递参数。...\""结果将是:"It is a test"同样,双引号也可以省略==显示变量==read 命令标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量#!

59620

栈上理解 Go语言函数调用

综上在函数调用中,关于参数的传递我们可以知道两个信息: 参数完全通过栈传递 参数列表的右至左压栈 下面是调用 add 函数之前的调用栈的调用详情: [call stack] 当我们准备好函数的入参之后...小结以下栈的调用规则: 参数完全通过栈传递 参数列表的右至左压栈 返回值通过栈传递,返回值的栈空间在参数之前 函数调用完毕后,调用方(caller)会负责栈的清理工作 结构体方法:值接收者与指针接收者...其实这段汇编和其他的函数调用的汇编是一样的,没啥好讲的,在调用 test 函数之前就是做了一些栈的初始化工作。...函数地址值存在栈 main 调用栈的栈顶,然后调用test 函数之后会将存放在 (SP) 的 test.func1 函数地址值写入到 AX 中,然后执行调用下面的指令进行调用: 0x0031 00049...调用函数地址写入到 caller 的栈顶; 这里的上下文信息指的是 x 变量以及 test.func1 函数

2K30
您找到你想要的搜索结果了吗?
是的
没有找到

gtest和gmock的关系_gtest教程

1.下载安装 Google Test and Google Mock 2....使用测试固件比单纯调用 TEST宏稍微麻烦一些: 1. gtest的 testing::Test类派生一个类,用 public或 protected定义以下所有成员。 2....用 TEST_F定义测试,写法与 TEST相同,但测试用例名必须为上面定义的类名。 每个带固件的测试的执行顺序是: 1. 调用默认构造函数创建一个新的带固件对象。 2....立即调用 SetUp函数。 3. 运行 TEST_F体。 4. 立即调用 TearDown函数。 5. 调用析构函数销毁类对象。...gtest的实现代码可以看到, TEST_F又从用户定义的类自动派生了一个类,因此要求 public或 protected的访问权限;大括号里的内容被扩展成一个名为 TestBody的虚成员函数函数

1.8K20

Google Test(GTest)使用方法和源码解析——结果统计机制分析

以《Google Test(GTest)使用方法和源码解析——概况 》一文中最后一个实例代码为基准,修改最后一个“局部测试”结果为错误。...实际也是如此,我们在代码中找到如下函数函数注释,我们就可以知道其对应于上面输出中那个结果的统计 // Gets the number of successful test cases. int UnitTestImpl...区别就是将test_case调用的Failed函数变成Passed函数。...而TestCase的Passed函数只是对Failed函数取反,所以最终还是调用到Failed中,我们看下其实现 bool Failed() const { return failed_test_count...如果没有错误结果,total_part_count函数返回0。而Failed函数返回false,即没有出错。         到此,我们将结果统计的实现讲完了。

1.7K30

GTest 总结_gtest单元测试

1断言 一般的,要测试一个方法(函数)是否是正常执行的,可以提供一些输入数据,在调用这个方法(函数)后,得到输出数据,然后检查输出的数据是否与我们期望的结果是一致的,若一致,则说明这个方法的逻辑是正确的...在对输出结果进行检查(check)时,Gtest为我提供了一系列的断言(assertion)来进行代码测试,这些宏有点类似于函数调用。...2.3 TEST_P宏 在设计测试案例时,经常需要考虑给被测函数传入不同的值的情况。我们之前的做法通常是写一个通用方法,然后编写在测试案例调用它。即使使用了通用方法,这样的工作也是有很多重复性的。...它的原型是: RUN_ALL_TESTS()是一个宏,将其实现为函数,在这里,调用了UnitTest单例的Run函数,看调用过程,可以看到,依次调用的过程是 1.UnitTest::Run() 2....Test::Run() 5. 参考文档 【1】google mock 介绍 【2】google test 介绍 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

1.4K10

零学习python 】27. Python 函数的使用及嵌套调用

基本使用 def test(a, b): "用来完成对2个数求和" # 函数第一行写一个字符串作为函数文档 print("%d"%(a+b)) test(11, 22) # 函数可以正常调用...输出结果: 33 help(test) # 使用 help 查看test函数的文档说明 输出结果: Help on function test in module __main__: test(a...:打印图形和数学计算 目标 感受函数的嵌套调用 感受程序设计的思路,复杂问题分解为简单问题 思考&实现1 写一个函数打印一条横线 打印自定义行数的横线 参考代码1 # 打印一条横线 def printOneLine...# 只需要多次调用函数即可 while i<num: printOneLine() i+=1 printNumLine(3) 思考&实现2 写一个函数求三个数的和...(省略)... ---- testB end---- ---- testA end---- 小总结: 一个函数里面又调用了另外一个函数,这就是所谓的函数嵌套调用 如果函数A中,调用了另外一个函数

10710

Java继承类的重名static函数浅谈解析调用与分派

今天被实习生问了这么个问题: 在java中,static成员函数是否可以被重写呢? 结论是,你可以在子类中重写一个static函数,但是这个函数并不能像正常的非static函数那样运行。...也就是说,虽然你可以定义一个重写函数,但是该函数没有多态特性。...; //输出结果为 static in testClass1 16 tc2.SMethod(); //输出结果为 static in testClass2 17 } 18 } 结果中可以看到...,当我们用父类的实例引用(实际上该实例是一个子类)调用static函数时,调用的是父类的static函数。...当一个方法被调用时,JVM首先检查其是不是类方法。如果是,则直接调用该方法引用变量所属类中找到该方法并执行,而不再确定它是否被重写(覆盖)。

1.2K30

【gtest】 C++ 的测试框架之使用 gtest 编写单元测试

cmake --build build cmake 是调用 CMake 工具的命令。 --build 是用于告诉 CMake 执行构建操作的选项。...一个测试程序可以包含多个测试套件(test suite)。 接下来,我们将解释如何编写一个测试程序,单个断言级别开始,逐步构建到测试和测试套件。...1.1 断言(assertions) 断言(assertions)是类似函数调用的宏。你可以通过对其行为进行断言来测试一个类或函数。...这些断言成对出现,测试相同的事物,但对当前函数有不同的影响。 ASSERT_* 版本在失败时会生成致命失败,并中止当前函数EXPECT_* 版本生成非致命失败,不会中止当前函数。...创建夹具的步骤: testing::Test 派生一个类。在类体开始处使用 protected:,因为我们希望从子类访问夹具成员。 在类中声明你需要使用的任何对象。

19210

Google Test(GTest)使用方法和源码解析——概况

我们可以通过https://github.com/google/googletest.git得到代码。        ...名字我们可以看出它为了兼容SEH机制——结构化异常处理——一种windows系统上提供给用户处理异常的机制。而这种机制在linux系统上没有。...以以上代码为例,三段TEST宏构成的是一个测试用例——测试用例名是FactorialTest(阶乘方法检测,测试Factorial函数),该用例覆盖了三种测试特例——Negative、Zero和Positive...(6)); EXPECT_TRUE(IsPrime(23)); }         这组测试用例的名是IsPrimeTest(测试IsPrime函数),三个测试特例是Negative(错误结果场景)...GTest框架可以让我们通过在程序参数控制执行哪个测试用例,比如我们希望只执行Factorial测试,就可以这样调用程序 .

4.3K20

汇编角度来理解linux下多层函数调用堆栈运行状态

我们用下面的C代码来研究函数调用的过程。...整个程序的执行过程是main调用foo,foo调用bar,我们用gdb跟踪程序的执行,直到bar函数中的int e = c + d;语句执行完毕准备返回时,这时在gdb中打印函数栈帧,因为此时栈已经生长到最大...所以下面的指令把参数a和b再次压栈,为调用bar函数做准备,然后把返回地址压栈,调用bar函数: 现在看bar函数的指令: int bar(int c, int d) {   80483dc:       ...那么main函数回到哪里去执行呢?实际上main函数也是被其他系统函数调用的,比如进一步si 下去会发现 是 被 libc-start.c 所调用,最终还会调用exit.c。...注意函数调用和返回过程中的这些规则: 1. 参数压栈传递,并且是右向左依次压栈。 2. ebp总是指向当前栈帧的栈底。 3. 返回值通过eax寄存器传递。

1.5K00

汇编角度来理解linux下多层函数调用堆栈运行状态

我们用下面的C代码来研究函数调用的过程。...整个程序的执行过程是main调用foo,foo调用bar,我们用gdb跟踪程序的执行,直到bar函数中的int e = c + d;语句执行完毕准备返回时,这时在gdb中打印函数栈帧,因为此时栈已经生长到最大...所以下面的指令把参数a和b再次压栈,为调用bar函数做准备,然后把返回地址压栈,调用bar函数: 现在看bar函数的指令: int bar(int c, int d) {   80483dc:       ...那么main函数回到哪里去执行呢?实际上main函数也是被其他系统函数调用的,比如进一步si 下去会发现 是 被 libc-start.c 所调用,最终还会调用exit.c。...注意函数调用和返回过程中的这些规则: 1. 参数压栈传递,并且是右向左依次压栈。 2. ebp总是指向当前栈帧的栈底。 3. 返回值通过eax寄存器传递。

92820

简单C++单元测试框架(支持一键切到GTest或Boost.Test)

类似Google的方法是没有主动调用add test suite或者add test case的 所以在这个CASE_TEST的时候就需要把test suite和case放进测试池中。...同时CASE_TEST的最后部分必须是函数申明,以便后续跟上测试代码块 如何完成这一点呢? 我这里利用了全局变量会在程序进入man函数前初始化的特点。...在申明CASE_TEST的时候,先作函数声明 > static void function_name(); 然后后跟一个全局注册变量,把suite名称、case名称和函数指针传进来 > test_case_base...CASE_EXPECT_GT(l, r) EXPECT_GT(l, r) #define CASE_EXPECT_GE(l, r) EXPECT_GE(l, r) 即可,然后在main函数的入口处作一些函数调用的适配即可...甚至在使用静态库的时候有自己的入口函数 简单地说就是分支比较多 在入口处要判断是静态库还是动态库,有没有使用boost.test内置的函数(详见: https://github.com/owt5008137

1.1K10

简单C++单元测试框架(支持一键切到GTest或Boost.Test)

类似Google的方法是没有主动调用add test suite或者add test case的 所以在这个CASE_TEST的时候就需要把test suite和case放进测试池中。...同时CASE_TEST的最后部分必须是函数申明,以便后续跟上测试代码块 如何完成这一点呢? 我这里利用了全局变量会在程序进入man函数前初始化的特点。...在申明CASE_TEST的时候,先作函数声明 static void function_name(); 然后后跟一个全局注册变量,把suite名称、case名称和函数指针传进来 test_case_base...接下来需要做的就是在构造函数里把函数注册进suite和case对应的测试池中。 那么在CASE的CHECK过程中怎么知道它是属于哪一个suite和case呢?...CASE_EXPECT_GT(l, r) EXPECT_GT(l, r) #define CASE_EXPECT_GE(l, r) EXPECT_GE(l, r) 即可,然后在main函数的入口处作一些函数调用的适配即可

49430
领券