<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[y_m_h的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/y_m_h</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; y_m_h]]></copyright><item><title><![CDATA[C++在头文件中是否可以有函数定义]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/168026408</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/168026408</guid><author>y_m_h</author><pubDate>Thu, 15 Oct 2026 18:38:41 +0800</pubDate><description><![CDATA[2）如果普通的函数定义放在头文件，可能会报告Linking globals named 'mangled_func_name': symbol multiply defined!原因：如果这个头文件被a.cpp  b.cpp  c.cpp同时包含，那么每个翻译单元都会各自产生一份真正的外部函数定义。4）当同一个函数被多个cpp调用时，可以使用inline修饰该函数，并且把该内联函数定义放在头文件中。1）通常来说，函数声明放在头文件中，函数定义放在cpp文件中。3）模版函数定义允许放在头文件中。]]></description><category></category></item><item><title><![CDATA[C代码覆盖率检查]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/162027120</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/162027120</guid><author>y_m_h</author><pubDate>Tue, 16 Jun 2026 11:14:59 +0800</pubDate><description><![CDATA[介绍了内部覆盖率与外部覆盖率的区别，其中，internal coverage是使用符号执行工具测量到的代码覆盖率，external coverage是在具体测试用例实际执行可执行程序测量到的代码覆盖率。可以自动生成高覆盖率的测试用例，并能深入探索那些在常规测试中容易被忽略的程序路径，是寻找复杂软件缺陷的有力助手。在运行时间足够的前提下，klee充分探索每个代码分支，并且会生成探索每个代码分支的测试用例（get_sign.c共有3个代码分支，所以会生成3个测试用例）能够测量，在运行测试用例时，程序中的。]]></description><category></category></item><item><title><![CDATA[llvm介绍]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/161474241</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/161474241</guid><author>y_m_h</author><pubDate>Thu, 28 May 2026 10:46:54 +0800</pubDate><description><![CDATA[LLVM是一个编译器基础设施项目，或者说是一个完整的“编译器生态”，它的核心设计就是一套通用的中间表示（IR，Intermediate Representation），并围绕它构建了一系列用于处理、优化和转换代码的库与工具。llvm：对应了总体项目，对IR的优化、根据架构组装可执行文件，在这个文件夹中。Clang：C编译器前端，将源码编译为IR，Clang只负责发起链接，会调用外部链接器。]]></description><category></category></item><item><title><![CDATA[在低版本Linux系统编译C++项目的若干经验]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/161455590</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/161455590</guid><author>y_m_h</author><pubDate>Wed, 27 May 2026 20:54:35 +0800</pubDate><description><![CDATA[devtoolset8对应gcc8，理应使用更高版本的libstdc++.so文件，因为系统原始安装的gcc为4.4.7，对应的libstdc++.so文件，缺少gcc8中的部分特性，这里devtoolset8做了巧妙设计，首先devtoolset8安装的gcc8去链接了/opt/rh/devtoolset-8/root/usr/lib/gcc/x86_64-redhat-linux/8中的libstdc++.so，这是一个文本文件，里面的内容是有。，在 C++11 中也增加了新的成员函数，如。]]></description><category></category></item><item><title><![CDATA[程序调用追踪]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/160566714</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/160566714</guid><author>y_m_h</author><pubDate>Mon, 27 Apr 2026 21:01:34 +0800</pubDate><description><![CDATA[可以在不中断流程的情况下，记录所有gcc-ar的动作，可以玩个“调包计”第四步，查看结果，cat /tmp/ar_commands.log。（Archiver）是 Linux 下创建静态库的标准工具。第二步，给执行权限，chmod +x my-ar.sh。2）创建一个“伪造”的 ar。第一步，编写一个脚本。1）使用strace。]]></description><category></category></item><item><title><![CDATA[在检索一个字符串的过程中，使用正则匹配子串，且可以替换子串中被匹配的内容]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/144246413</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/144246413</guid><author>y_m_h</author><pubDate>Wed, 04 Dec 2024 19:04:04 +0800</pubDate><description><![CDATA[【代码】在检索一个字符串的过程中，使用正则匹配子串，且可以替换子串中被匹配的内容。]]></description><category></category></item><item><title><![CDATA[leetcode912.排序数组的题解]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/143579064</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/143579064</guid><author>y_m_h</author><pubDate>Wed, 06 Nov 2024 20:26:58 +0800</pubDate><description><![CDATA[思考：经典算法、前人经验当然是很好的，能够解决大部分问题，但是总有新的未知的情况出现，那么如何改进经典算法解决现有问题就是一个有趣的事情，把前人的算法理解透彻、算法的每一步的作用、新问题给现有算法带来了哪些挑战、如何改进原有算法既能不影响对于原有测试用例的处理效果又能改进对于新问题的处理效果，怎么办呢，勤学好问、多思考、多见识，把有趣的问题想清楚、弄明白，不贪多求全，找准方向、方法，刻意训练。笔者使用了快速排序，但是直接使用最原始的快速排序，有些特殊的测试用例会超时。]]></description><category></category></item><item><title><![CDATA[leetcode35.搜索插入位置]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/143450978</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/143450978</guid><author>y_m_h</author><pubDate>Sat, 02 Nov 2024 16:31:13 +0800</pubDate><description><![CDATA[这里将第3版代码与第2版做对比，讨论mid与左右边界的关系、以及左右边界的更新策略，当l+r不能整除时，(l+r)/2取下整，举个例子，如果l=3，r=4，则mid应该是3.5，当然计算机默认策略是取下整3，是小于3.5的一个整数，所以在r-l=1时，l与mid是重合的，如果是左边界更新，可以将其更新为mid+1，向右边界靠近，如果是右边界更新，只能将其更新为mid（如果更新为mid-1，则可能出现左边界>右边界的情况），也可以理解，mid=(l+r)/2可能在左右边界的中间位置，也有可能偏左。]]></description><category></category></item><item><title><![CDATA[基于acl2镜像快速验证乘法器]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/143303651</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/143303651</guid><author>y_m_h</author><pubDate>Mon, 28 Oct 2024 18:42:14 +0800</pubDate><description><![CDATA[在第一次验证乘法器后，会在bin目录中编译生成一个名称为vescmul.lx86cl64的镜像文件，再次验证时会使用这个镜像，验证时间会大幅度减少，编译生成这个镜像文件比较耗时，如果在其他机器上验证乘法器，把这个镜像复制过去就可以。2）在acl2镜像同级目录中有一个可执行脚本文件，在其中设置acl2的解释器ccl的路径CCL_DEFAULT_DIRECTORY，把ccl/lx86cl64、acl2镜像vescmul.lx86cl64的路径设置好。而且在acl2的验证日志中有如下打印反例的日志。]]></description><category></category></item><item><title><![CDATA[常用的linux命令积累]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/142794240</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/142794240</guid><author>y_m_h</author><pubDate>Wed, 09 Oct 2024 19:15:38 +0800</pubDate><description><![CDATA[1）结束多个带有关键字的进程。]]></description><category></category></item><item><title><![CDATA[acl2的安装和vescmul的运行]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/141401512</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/141401512</guid><author>y_m_h</author><pubDate>Mon, 26 Aug 2024 22:22:11 +0800</pubDate><description><![CDATA[github上的acl2验证乘法器的接口已经更新为vescmul-parse、vescmul-verify，接口参数大致相同，写好acl2验证脚本verify.lisp后，执行如下命令。vescmul目前使用acl2验证乘法器的接口为parse-and-create-svtv、verify-svtv-of-mult。在acl2/books/projects/rp-rewriter/lib/mult3中确认top.lisp文件的存在。下面简单介绍一下acl2的安装、vescmul的运行。]]></description><category></category></item><item><title><![CDATA[vscode添加新行]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/141397150</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/141397150</guid><author>y_m_h</author><pubDate>Wed, 21 Aug 2024 16:33:24 +0800</pubDate><description><![CDATA[使用“ctrl+shift+Enter”，在当前行前添加新行。使用“crtl+Enter”，在当前行后添加新行。]]></description><category></category></item><item><title><![CDATA[vim进行行选择或列选择]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/140779895</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/140779895</guid><author>y_m_h</author><pubDate>Mon, 29 Jul 2024 20:00:51 +0800</pubDate><description><![CDATA[Ctrl+v：用于进入（Visual Block Mode），用于选择矩形块区域。你可以用这种模式来选择多个列或矩形区域的内容。Shift+v：用于进入（Visual Line Mode），用于选择整行内容。]]></description><category></category></item><item><title><![CDATA[verdi如何设置波形数据和进制]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/140551708</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/140551708</guid><author>y_m_h</author><pubDate>Fri, 19 Jul 2024 15:49:29 +0800</pubDate><description><![CDATA[2）在rtl代码中，信号会显示具体的逻辑值，默认是十六进制，在菜单栏点击“source”，点击“set radix”，选中“set Decimal”1）在波形图中选中时刻。]]></description><category></category></item><item><title><![CDATA[llvm lit使用时的若干注意事项]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/140551542</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/140551542</guid><author>y_m_h</author><pubDate>Fri, 19 Jul 2024 15:41:36 +0800</pubDate><description><![CDATA[使用llvm lit运行回归测试时，lit无法自动将环境变量导入回归测试的进程中，可在lit.cfg中，使用addEnv将环境变量导入到回归测试进程中。]]></description><category></category></item><item><title><![CDATA[vim修改文件过程中且尚未保存文件前，外部工具读取文件的情况]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/140469274</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/140469274</guid><author>y_m_h</author><pubDate>Tue, 16 Jul 2024 16:10:29 +0800</pubDate><description><![CDATA[命令保存文件，那么在修改过程中，文件的内容不会被写入到磁盘。这意味着未保存的修改只存在于 Vim 的内存中，原始文件在磁盘上的内容保持不变。在 Vim 中，如果你在修改一个文件的过程中没有使用。可以一边用vim，一边用cat验证这个说法。]]></description><category></category></item><item><title><![CDATA[C++是否可以使用.获取union、struct中的成员变量的地址]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/140449199</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/140449199</guid><author>y_m_h</author><pubDate>Mon, 15 Jul 2024 21:15:23 +0800</pubDate><description><![CDATA[C++可以使用.获取union、struct中的成员变量的地址。]]></description><category></category></item><item><title><![CDATA[vim全局替换、添加新行、同时注释多行]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/140446132</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/140446132</guid><author>y_m_h</author><pubDate>Mon, 15 Jul 2024 18:45:44 +0800</pubDate><description><![CDATA[移动光标，使其停留在待注释的第一行的行首，按“crtl+v”进入可视化模式，一直按‘j’直至停到待注释的最后一行的行首，按“shift+i”在待注释的第一行的行首输入“注释符号”，按‘ESC’键，所有被选中的行都会按照待注释的第一行的方式被注释。在命令模式下，输入命令“:%s/old_str/new_str/g”，如果在替换前确认每次替换，可以在命令末尾加上‘c’在命令模式下，按‘o’]]></description><category></category></item><item><title><![CDATA[gvim 复制粘贴文本]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/139708314</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/139708314</guid><author>y_m_h</author><pubDate>Sat, 15 Jun 2024 20:56:24 +0800</pubDate><description><![CDATA[1.在普通模式下，按“yy”将当前行复制到gvim的粘贴板中，按“p”将被复制的行粘贴当前行的下一行。2.如果在复制粘贴时，gvim与系统剪切板联合使用，使用“+”前缀。在普通模式下，按“+p”将系统剪切板的内容复制到当前行。在普通模式下，按“+yy”将当前行复制到系统剪切板。]]></description><category></category></item><item><title><![CDATA[linux gvim与其他地方互相复制文本]]></title><link>https://blog.youkuaiyun.com/y_m_h/article/details/139630440</link><guid>https://blog.youkuaiyun.com/y_m_h/article/details/139630440</guid><author>y_m_h</author><pubDate>Wed, 12 Jun 2024 16:33:11 +0800</pubDate><description><![CDATA[3.在gvim中，使用鼠标选中文本后，按"+y将文本复制到系统剪切板，然后右键“paste”，或使用“ctrl+v”，粘贴文本。1.在其他地方选中文本后，右键“copy”，或者"crtl+c"，复制文本，在gvim中使用鼠标中键粘贴内容。2.在gvim中，使用鼠标选中文本后，使用y复制，在另一窗口使用p粘贴。]]></description><category></category></item></channel></rss>