
C语言
文章平均质量分 90
“雄关漫道真如铁,而今迈步从头越”,这是一个编程的世界,而现在才刚刚开始。
Once-Day
长路漫漫,一人太孤单,无人理解,独自前行,给世界留下一点微不足道的痕迹,稍微弥补曾经的遗憾。
展开
-
C之(14)gcov覆盖率
在现代软件开发过程中,代码质量和可靠性至关重要。为了确保软件的正确性和稳定性,软件测试已成为开发流程中不可或缺的一部分。而在众多软件测试方法中,代码覆盖率测试因其客观、量化的特点而备受关注。代码覆盖率测试是一种白盒测试方法,旨在衡量测试用例对代码的执行覆盖程度。通过插桩等技术手段,代码覆盖率测试工具可以记录并统计测试过程中每一条代码的执行情况,并以此计算出多种覆盖率指标,如语句覆盖率、分支覆盖率、条件覆盖率等。这些指标从不同维度反映了代码的测试充分性,为发现未被测试覆盖的代码片段提供了量化依据。原创 2025-01-01 14:17:00 · 1020 阅读 · 7 评论 -
C++(1)基础语法
C++是一种通用编程语言,由Bjarne Stroustrup在贝尔实验室工作时于1979年开始开发。C++最初被命名为"C with Classes",旨在扩展C语言以支持面向对象编程。随着时间的推移,C++不断发展,引入了许多新特性,如异常处理、模板、标准模板库(STL)等。1998年,C++第一个国际标准ISO/IEC 14882:1998发布,使其成为一种成熟、稳定且广泛使用的编程语言。原创 2024-08-31 15:59:22 · 3346 阅读 · 64 评论 -
代码训练LeetCode(12)二进制求和
二进制加法本质上和十进制加法相似,只不过它只包含两个数字:0和1。我们可以使用一个指针从两个字符串的末尾开始向前遍历,模拟手工加法的过程。同时,我们需要一个变量`carry`来记录进位。对于每一对位,我们需要计算它们的和再加上`carry`,然后更新`carry`。原创 2024-03-15 00:00:33 · 965 阅读 · 27 评论 -
代码训练LeetCode(11)删除有序数组中的重复项II
给定一个有序数组 `nums`,你需要原地修改这个数组,去除那些出现超过两次的重复元素。这里的“原地”意味着你不能使用额外的数组结构来辅助完成这个任务;仅能使用有限的额外空间(O(1)),也就是说,除了几个变量以外,不得使用额外的空间资源。由于数组已经有序,所以重复的元素一定是连续的。我们可以使用两个指针来解决这个问题原创 2024-03-14 23:58:19 · 1235 阅读 · 4 评论 -
代码训练LeetCode(7)删除有序数组中的重复项
有一个数组 nums,它是非严格递增的,也就是说,数组中的元素可能会有重复,并且它们是按照顺序排列的。你的任务是要在不改变元素相对顺序的情况下,仅保留每个元素的一个副本,并删除所有的重复元素。你需要在不使用额外数组的条件下完成这个操作,这就意味着你需要在原地修改输入的数组 nums。原创 2024-03-10 23:00:39 · 1305 阅读 · 30 评论 -
代码训练LeetCode(6)编辑距离
这种表面一看,似乎是个字符串问题,但是如果按照分类匹配去做,怕是很难得出合理的方法。求两个字符串的编辑距离实际是个动态规划入门题目,动态规划算法是解决这个问题的标准方法。原创 2024-03-09 23:08:34 · 2527 阅读 · 54 评论 -
代码训练LeetCode(5)最长连续序列
这个问题是在寻找最长连续序列的长度,但不要求这些序列在原数组中是连续的。要在 O(n) 时间复杂度内解决这个问题,我们可以利用哈希表(在 C 中通常使用散列表或字典类型的数据结构)。原创 2024-03-09 23:06:33 · 1118 阅读 · 13 评论 -
代码训练LeetCode(4)字母异位词
题目要求我们编写一个函数,这个函数需要判断两个字符串 `s` 和 `t` 是否是字母异位词。如果一个字符串的字母重新排列后能够得到另一个字符串,那么这两个字符串互为字母异位词。换句话说,两个字符串有相同的字母和相同数量的每个字母。可以使用一个大小为 26 的整数数组来代替哈希表。数组的每个位置对应一个字母,值为该字母在字符串 `s` 中出现的次数。原创 2024-03-07 23:39:27 · 1152 阅读 · 24 评论 -
代码训练LeetCode(3)移除元素
解题思路很简单,从数组的第一个元素开始,一直检查到最后一个元素,当你找到一个`val`时,你可以将它和数组最后一个元素交换,然后“丢弃”掉最后一个元素。这样,你就在不增加额外空间的情况下,原地修改了数组。重复这个过程,直到你检查完所有的元素。原创 2024-03-07 23:33:14 · 743 阅读 · 3 评论 -
OD(4)之libunwind打印堆栈信息
libunwind是一个用于确定程序的调用栈的便携式和高效的编程库。它最初是为了改善在IA-64上的Linux系统上的程序性能分析和错误调试,但后来被扩展到支持其他架构。libunwind项目始于2000年代初期,并且随着时间的推移,它已经被各种系统和架构所采纳。libunwind提供了一组API,允许程序在运行时查询和设置调用帧的状态,主要用于堆栈跟踪(stack unwinding)。这个功能对于异常处理、程序调试以及任何需要检查程序调用历史的场景都非常有用。便携性:支持多种处理器架构和操作系统。原创 2024-01-12 00:18:06 · 3016 阅读 · 0 评论 -
编码风格之(3)GUN软件标准风格(1)
GNU编码标准》(GNU Coding Standards)是由GNU项目制定的一系列详细的编码准则和最佳实践。这些标准旨在确保GNU软件的质量和维护性,并且为开发者提供一致的编程风格和实践。GNU编码标准的内容不仅仅局限于代码风格,还包括软件设计、文档、版权和其他开发实践。Preliminaries(前言),此部分介绍了GNU编码标准的目的和重要性,以及为什么应该遵循这些标准。Writing Robust Programs(编写健壮的程序),这一章节提供了编写健壮、安全和可移植代码的建议。原创 2024-01-07 23:18:23 · 1004 阅读 · 0 评论 -
编码风格之(2)C语言规范(Linux内核风格)
本文总结并且描述Linux内核的编码风格,这是一份存在很久的文档,其实每一种编码风格都有其侧重点,也不会面面俱到,对于我们来说,不妨放下内心的偏见,博纳众家之长,丰富认知和经验。这是一个简短的文档,描述了linux内核的首选编码风格。编码风格是非常个人化的,我不会把我的观点强加给任何人,但这是我必须能够维护的任何东西,我也希望它适用于大多数其他东西。请至少考虑一下这里提出的观点。首先,我建议打印一份GNU编码标准的副本,不要读它。烧了它们,这是一个很好的象征性姿态。原创 2023-12-30 00:14:54 · 1137 阅读 · 0 评论 -
编码风格之(1)C语言建议规范
介绍锐捷风格的C语言规范原创 2023-12-27 22:30:53 · 974 阅读 · 0 评论 -
(转载)一文彻底搞懂并发编程与内存屏障(IT知识刺客)
详细而生动的解释了内存屏障的概念,并且结合多核架构进行分析,最后结合实例讲解,深入浅出,收益颇多。转载 2023-12-11 22:59:37 · 256 阅读 · 0 评论 -
计基之(8)通用优化策略
Author:onceday Date:2023年8月22日长路漫漫,而今才刚刚启程!Linux C++性能优化:从编译器到代码,探究高性能C++程序的实现之道 (qq.com)《C++性能优化指南》, [美] Kurt Guntheroth 著, 杨文轩 译, 人民邮电出版社.注: 本书大部分内容摘抄于《C++性能优化指南》,仅供学习和交流之用。优化是一项编码活动。在传统的软件开发过程中,直到编码完成,项目进入了集成与测试 阶段,能够观察到程序整体的性能时,才会进行优化。原创 2023-11-12 23:52:28 · 228 阅读 · 0 评论 -
C之(10)CMocka-单元测试框架使用
CMocka 是一个用于 C 语言的单元测试框架,它是 Check 单元测试框架的一个分支。CMocka 的设计哲学是“只做一件事,但做得好”,这使得它成为一个轻量级、易于使用的工具。它为测试 C 代码提供了一种简单、稳定的方法。轻量级和模块化:CMocka 不需要复杂的设置,不依赖于其他库,且不会大幅度地增加你的项目大小。你可以简单地将其添加到你的 C 项目中,然后开始编写测试。模拟函数:在进行单元测试时,我们通常需要模拟一些函数以便在特定条件下测试我们的代码。原创 2023-11-03 23:24:52 · 3094 阅读 · 0 评论 -
C之(9)函数内联(inline)深入分析
函数内联并非是一种编程技巧,而是一种优化技巧。对于编程层级代码而言,我们总是希望代码的抽象层级较高,尽可能复用逻辑相同的部分,从而降低代码量和维护难度。但是高度抽象的代码,难免会有一些冗余判断,或是设计不当,或是强行融合,或是技术不够…,不管什么原因,总会存在一些制约条件使得抽象复用的代码在性能方面存在一些不足。一种理想的场景是,如果在编程层级维护高度抽象的复用代码,在汇编层级生成特化的执行指令,便可以达到性能和维护性的平衡。但是代价是什么?原创 2023-08-12 19:05:07 · 867 阅读 · 3 评论 -
C之(8)linux动态库编译框架
很多时候,我们需要开发一套基本库用于程序开发。这一般有两种方式,一种是源码分发,一种是库文件分发。下面准备介绍的就是库文件分发的方式。目标平台是Linux系统,虽然不同系统的细节也不一样,但整体思想类似。基础的源文件,用于构建一层抽象接口屏蔽层次,为未来跨系统移植留下一些铺垫。编译脚本,如何编译以及生成输出,如何添加所需的编译选项。测试脚本,和整体编译框架集成,并且生成所需要的信息。当前的整套框架仍然比较简陋,但是重要是整个学习过程,以及了解相关的知识和概念。原创 2023-08-07 20:47:51 · 1109 阅读 · 0 评论 -
Linux编译之(1)C语言基础
Linux下如何交叉编译C源文件,以及配套的glibc库。原创 2023-03-13 01:48:09 · 3303 阅读 · 0 评论 -
C之(6)强弱符号引用
如果在代码里面重复定义变量、全局函数,那么编译器就会报出的错误。注意,这里针对同一作用域才会有冲突。一种是语法块作用域,即大括号括起的语句块,其变量都是局部作用域。另外就是文件作用域,这个和常说的全局作用域很像,但是仅限于C源文件,需要注意,C的源文件是单独编译的。再就是全局作用域,即其符号作用域为整个二进制文件。那这里重点关注重定义问题,就是全局作用域。int a;....弱符号的机制是用来定义某个桩函数,适合于用户自定义新函数来覆盖原有的功能。原创 2023-01-11 23:44:08 · 519 阅读 · 0 评论 -
一种常见的Clang-format配置
一种简单的clang-format配置原创 2022-11-15 22:37:23 · 940 阅读 · 0 评论 -
Clang-format格式化及配置参数
详细介绍了clang-format 16版本支持的配置参数原创 2022-11-09 00:20:40 · 26153 阅读 · 6 评论 -
位级运算之提取位级表示的最高位
提取位级表示的最高位,一种快速的算法。原创 2022-07-31 14:25:19 · 940 阅读 · 0 评论 -
位级运算之计算整数位级表示奇偶性
计算整数位级表示的一种快速算法原创 2022-07-31 14:21:38 · 392 阅读 · 0 评论 -
计算机基础之整数和浮点数
本文详细介绍了整数和IEEE浮点数的位级表现形式,以及相关的基础知识。原创 2022-07-31 01:27:26 · 304 阅读 · 0 评论 -
Makefile(make)常见规则(二)
make的指令介绍以及makefile的规则、模式介绍原创 2022-07-28 16:35:03 · 845 阅读 · 0 评论 -
GCC基础知识
gcc基础知识原创 2022-07-27 13:43:24 · 1065 阅读 · 0 评论 -
VScode配置makefile编译
简单的配置vscode用makefile编译原创 2022-07-26 21:47:21 · 3919 阅读 · 0 评论 -
C语言之基础语法
一些基本的C语言語法原创 2022-07-26 21:40:30 · 1571 阅读 · 0 评论 -
编码规范之低级BUG
养成习惯!原创 2022-07-16 18:02:25 · 799 阅读 · 0 评论 -
C之预处理
C之预处理author:onceday date:2022年5月6日本文档在于总结相关内容,零散的知识难以记忆学习。本文档基于windows平台。全系列文档查看:C语言_优快云博客。文章目录C之预处理1.概述2.物理行(physical line)和逻辑行(logical line)3.明示常量(符号常量 manifest constant)#define3.1 对象类(object-like macro)比较简单,如以下示例:3.2 函数宏(function-like macro)3原创 2022-05-07 17:21:40 · 238 阅读 · 0 评论 -
2019-9-6基本数据类型以及声明、输入输出
主要包括整数类型、浮点数类型以及复数类型介绍。1.输出和输入函数C语言使用输入(键盘)和输出功能(监视器),需要标准输入/输出头文件(stdio.h)的支持。#include <stdio.h>这是一条预处理器指令,它会将stdio.h文件里面拷贝到代码中。C语言并没有内置输入输出,而是采取头文件这样可取的方式,是因为在许多应用环境里,如单片机、嵌入式系统等,并没有输出和输入模块(往往通过外设实现)。C语言是由函数为基本模块构成的,第一个被调用的函数是 main() 函数,而且总是这原创 2021-05-25 11:51:55 · 424 阅读 · 0 评论