基础
小飞将
一切过往,皆为序章
展开
-
我的创作纪念日
后来很长时间没有创作或者提问,直到工作后,进入NI研发做驱动,当时水平真的很差,很多同事轻松完成的工作,我加班也不一定能做好,因此下定决心把工作中的每个问题都弄清楚,把C++学好,从这段时间2019年开始大量写博客,编代码,是创作文章最多的时候。当前创作文章很少了,因为没有特别多的技术点要探索,投入生活中的时间更多了,后续发的文章可能会很少。原创 2024-04-15 17:32:56 · 247 阅读 · 0 评论 -
C++实现内存池Memory Manager,并可以合并空闲内存空间
这个内存池的设计思想是使用链表(link list)来管理用户从内存池里开辟出的memory block,allocate操作从内存池中取出所需size的memory block,它不断从未使用的空间中通过指针偏移从已经分配的内存池中取内存,而无需直接使用malloc或者new。这个内存池的缺陷是无法整理不相邻的内存库,最后内存可能碎片化,这需要复杂的内存分配策略,例如最佳适配(best fit)、最差适配(worst fit)或伙伴系统(buddy system)。原创 2023-11-28 20:59:26 · 214 阅读 · 0 评论 -
如何正确的在C++中实现单例SingleTone模式
单例模式保证该类始终只有一个实例对象,以表现唯一资源的设计(不可拷贝)。原创 2023-10-11 19:52:53 · 123 阅读 · 0 评论 -
C++中如何描述table表格类型数据结构
C++实现table类型数据结构原创 2023-09-26 19:35:39 · 520 阅读 · 0 评论 -
disable MSVC/GCC编译warning
【代码】disable MSVC编译warning。原创 2023-09-25 10:59:22 · 78 阅读 · 0 评论 -
std::thread传入类成员函数指针报错failed to specialize function template ‘unknown-type invoke
这里使用一个myclass实例c放入thread构造函数,以指定使用的函数指针是c所属。如果在类内部创建线程函数,并且函数指针是类成员函数指针,则需要传入this指针。原创 2023-09-22 11:04:58 · 248 阅读 · 0 评论 -
Markdown和PlantUML的基本使用
首先需要在VS Code中安装Markdown extention和plantUML插件。原创 2023-09-06 14:05:45 · 1002 阅读 · 0 评论 -
基于C++标准库的整形、浮点数随机数生成工具,以及从已有集合中随机取出一个
【代码】基于C++标准库的整形、浮点数随机数生成工具,以及从已有集合中随机取出一个。原创 2023-08-30 14:15:57 · 90 阅读 · 0 评论 -
fscanf_s()使用
对于fscanf_s()来说,只设置一个长度参数或者不指定长度参数,都可以通过,为每个数据都指定反而是错的,fscanf_s()不如fscanf()函数来的直接。测试文件data.txt。原创 2023-08-29 15:06:57 · 1384 阅读 · 0 评论 -
如何创建Google test shared library(dll)和static library(lib),并编写测试用例
在Windows下使用Visual Studio开发自测试代码,通常需要创建shared library(dll)和static library(lib)文件用于编译和链接,本文介绍如何从google test开源代码编译dll和lib文件,并创建一个简单的Gtest用例。原创 2023-08-08 12:00:59 · 651 阅读 · 0 评论 -
C++类定义中声明和初始化static静态变量
在类头文件中声明public类型的static变量,在类的源文件中初始化,注意变量之前需要类作用域。原创 2023-01-17 10:04:16 · 342 阅读 · 1 评论 -
C/C++检查文件夹是否存在并创建
【代码】C++检查文件夹是否存在并创建。原创 2022-12-26 16:58:46 · 451 阅读 · 0 评论 -
C/C++打印宏或变量名称与值
【代码】C/C++打印宏或变量名称与值。原创 2022-11-12 11:49:32 · 1490 阅读 · 0 评论 -
如何获取PCI设备bus总线号
【代码】如何获取PCI设备bus总线号。原创 2022-10-28 17:18:33 · 986 阅读 · 0 评论 -
打印UInt32整形数据中每个字节及拷贝特定字节的方法
核心在于将src地址转为uint8_t类型指针,以便进行字节级别访问。原创 2022-09-27 19:50:51 · 1376 阅读 · 0 评论 -
如何使用WinDbg和Virtual Box进行Windows驱动debug
WinDbg and Virtual Box kernel-debug.原创 2022-06-13 20:49:37 · 387 阅读 · 0 评论 -
C#调用C代码生成的DLL的DLLImport方式
C#代码需要调用C开发的动态库时,可以使用DLLImport的方式。通过来指定调用的dll及其路径,调用规范和entery point,通常这个新定义的函数和DLL中的函数同名,如果遇到传入数组形式如double *,C#使用double[]代替,如果传入指针类型用于返回参数,如point to int,则在C#中使用ref int形式。有时代码会报出"Entry Point not found"错误,这可能是DLL生成时没有extern C造成。原创 2022-06-02 15:32:24 · 856 阅读 · 0 评论 -
什么是软件架构-我的理解
设计软件架构就是对软件进行建模,设计软件工作的逻辑,对数据的处理和运算。软件架构只抽象出对目标实现最关键的逻辑部分。原创 2022-05-04 14:53:06 · 241 阅读 · 0 评论 -
创建动态链接库,头文件报错expected initializer before “function name“
extern "C" MATHLIBRARY_API void _cdecl fibonacci_init( const unsigned long long a, const unsigned long long b);头文件这个函数前报出expected initializer before “fibonacci_init”,这是由于函数前的_cdecl造成,只有一个下划线的cdecl和两个下划线的__cdecl是同义词,但是某些配置下,它们不一样:为了与以前的版本兼容, cdecl 和原创 2022-04-21 22:05:39 · 2875 阅读 · 0 评论 -
C++多线程的使用,返回值和加锁
使用C++多线程可以进行并行计算,提高执行速率。在创建thread对象时,要注意如果返回参数是引用类型,如果不使用std::ref前缀,会发生:Error C2672 'std::invoke': no matching overloaded function found;Error C2893 Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&.原创 2022-04-13 17:43:09 · 1774 阅读 · 1 评论 -
如何使用开源FFTW库进行FFT和逆FFT运算
首先下载FFTW3库,在Windows平台上使用Developer Command Prompt工具生成静态库.lib文件。创建VC测试项目,将库中提供的libfftw3-3.dll和fftw3.h,以及生成的libfftw3-3.lib放在测试项目中,配置好include path和link path/item。// FFT_CPP_Test.cpp : This file contains the 'main' function. Program execution begins and end.原创 2022-04-11 17:03:25 · 2781 阅读 · 1 评论 -
以循环中index作为名称创建文件并保存数据
for (int i - 0; i < 10; ++i) { char filePath[100] = "./"; char index[1] = { 0 }; sprintf(index, "%d", i); strcat(filePath, index); strcat(filePath, ".txt"); ofstream f(filePath); f << data << endl;}原创 2022-03-18 18:18:42 · 357 阅读 · 0 评论 -
Visual Studio创建动态链接库时,接口报出dllexport/dllimport requires external linkage
headerextern C LIB_EXPORTS_API void _cdecl func()sourcestatic void func()此时func会报出dllexport/dllimport requires external linkage错误,并且最终生成的只有dll文件,没有lib文件。解决方案是删除source中函数声明之前的static关键词。reference:https://stackoverflow.com/questions/9458595/export-fun原创 2022-03-18 09:31:12 · 553 阅读 · 0 评论 -
MFC设置鼠标为忙碌状态
有时程序执行某个过程很耗时,为了提示用户程序处于忙碌状态,可以将鼠标设置为转圈的忙碌状态:{ CWaitCursor wait; // display wait cursor. 设置为忙碌模式 // do some lengthy processing Sleep(1000); AfxMessageBox(_T("Process Complete")); //This changes the cursor. wait.Restore(); //Restore the Wait cursor.原创 2021-12-09 17:32:09 · 889 阅读 · 0 评论 -
C/C++如何使用_DEBUG宏来帮助进行调试
在调试过程需要显示更多的调试信息,而release模式下不需要,这时使用_DEBUG宏来进行状态切换很方便:#ifdef _DEBUG printf("Debug value: %f\n", value);#endif这段打印代码只会在debug模式下执行。原创 2021-12-09 17:22:28 · 1011 阅读 · 0 评论 -
如何从MFC的Editor Control控件中读取字符数组和浮点数
CString SampleRateStr; // 用于接收editor controlneirong的CSringGetDlgItemText(CYVSTSampleRateCtl, SampleRateStr); // 将editor control内容输入CStringdouble sampleRateValue = _ttof(SampleRateStr); // 将CString转换为浮点数CString WaveformNameStr;GetDlgItemText(CYVSTIMWav原创 2021-12-09 09:47:23 · 1203 阅读 · 0 评论 -
C语言记录执行时间
#include <stdio.h>#include <time.h>int main () { time_t start_t, end_t; double diff_t; printf("Starting of the program...\n"); time(&start_t); printf("Sleeping for 5 seconds...\n"); sleep(5); time(&end_t);转载 2021-12-07 18:56:19 · 1080 阅读 · 0 评论 -
在Visual Stuio项目属性中使用相对路径进行配置
如果需要在项目属性中配置Additional Library Directories这类属性,使用绝对路径会导致切换开发环境后无法编译,使用相对路径可以解决问题。使用“…\” :这种方式是相对于Visual Studio的安装目录开始C:\Program Files (x86)\Microsoft Visual Studio\2017,通过继续“…\”来向上级目录定位。使用“$(ProjectDir)”或者“$(SolutionDir)”这种方式,从VS Project或者VS Solution路径开原创 2021-12-06 21:34:46 · 633 阅读 · 0 评论 -
在使用Visual Stduio创建一个动态库时,报出C2065 ‘identifier‘ : undeclared identifier错误
这个错误很奇怪,在创建一个console项目时,编译并不会报出C2065这个问题,编译时可以找到声明,但改成动态库项目后就会报C2065。这是由于动态库程序一定要把“pch.h”这个头文件放在include的第一行:#include "pch.h"#include <stdio.h>#include <stdlib.h>#include <string.h>如果将pch.h这个头文件include在其他头文件之后,就会出现找不到声明的问题。...原创 2021-12-04 17:14:54 · 1010 阅读 · 0 评论 -
C/C++获取计算机MAC地址
// CheckMacAddress.cpp : This file contains the 'main' function. Program execution begins and ends there.//#include <stdio.h>#include <Windows.h>#include <iphlpapi.h>#define IP_LOCALHOST 0x0100007F#define MAX_ADDR_LEN 18int main原创 2021-12-02 20:53:54 · 2952 阅读 · 1 评论 -
使用C语言读取IQ文件
#include <stdio.h>#include <stdlib.h>#include <string.h>int CountNewLine(FILE *f) { char c; int line = 0; while ((c = fgetc(f)) != EOF) { if (c == '\n') { ++line; } } return line;}int ReadIQDataF原创 2021-10-30 10:12:27 · 1056 阅读 · 0 评论 -
C语言 getline函数实现
int getline(char str[], int lim, FILE *f) { char c; int i; for (i = 0; i < lim - 1 && ( (c = fgetc(f)) != EOF && c != '\n'); ++i) { str[i] = c; } if (c == '\n') { str[i] = c; } str[++i] = '\0'; // 添加结束符原创 2021-10-29 16:19:50 · 1557 阅读 · 0 评论 -
C++多线程的基本使用
在这里编写一个程序,后台线程不断更新天气温度信息,并打印:#include <thread>#include <map>#include <chrono>using namespace std::chrono_literals;void RefreshForecase(std::map<std::string, int> forecaseMap) { while (true) { for (auto &i : forec原创 2021-10-28 20:46:03 · 218 阅读 · 0 评论 -
使用fscanf来读取行交替的文本数据
假设有两种数据:IData和QData,它们在文件中以行交替重复出现:Line countIData1QData1IData2QData2...可以用如下程序读取文本中的数据:int main(){ const char *filePath = "C:\\IQ.txt"; FILE *f = fopen(filePath, "r"); // read only mode if (f == NULL) { printf("Open file failed\n原创 2021-10-20 20:02:48 · 383 阅读 · 0 评论 -
对结构体中数组的初始化问题
发现一个问题,当定义了一个结构体,结构体中含有数组,使用一个数组直接复制给结构体数组是错误。typedef struct _Snake { char direction; int snakeSize; int body[MAXSIZE * MAXSIZE];} Snake;int snakeBody[MAXSIZE * MAXSIZE] = { 0 };Snake sn;sn.body = snakeBody; // int *类型的值不能用于初始化int类型的实体面对这种原创 2021-10-16 16:25:47 · 2805 阅读 · 0 评论 -
C语言中以static说明符开头的变量和函数具有的性质
在头文件定义了函数,可能会在多个源文件中包含相同的头文件,如果不加static,当编译器展开头文件时,同一个函数会被定义多次。使用static关键字会把它定义为本地函数,其作用域限制在本文件内。不适用static就需要用宏定义的方式,使用#ifdef,#ifndef很#endif来防止重复包含。...原创 2021-04-12 22:10:03 · 1405 阅读 · 0 评论 -
Git与Devops的使用记录
Microsoft Windows [Version 10.0.19042.804](c) 2020 Microsoft Corporation. All rights reserved.C:\Users\Administrator>gitusage: git [--version] [--help] [-C <path>] [-c <name>=<value>] [--exec-path[=<path>]] [--html原创 2021-03-03 14:26:02 · 418 阅读 · 0 评论 -
如何使用chrono库测试C++程序执行时间
使用C++标准库std::chrono记录程序段开始执行时间,结束执行时间,相减后转换成某个时间单位。example:#include <iostream>#include <chrono> long fibonacci(unsigned n){ if (n < 2) return n; return fibonacci(n-1) + fibonacci(n-2);} int main(){ auto start = std::ch原创 2020-12-16 10:51:43 · 961 阅读 · 0 评论 -
如何在Visual Studio Code中使用MinGW编译和调试C++代码
为了在VS Code中调试代码,首先需要安装VS Code和MinGw,参考文章Command line配合MinGW接下来是具体设置:1.打开cmd,cd至项目目录,键入code .,在VS Code中打开项目;2.VS Code中使用快捷键Ctr+Shift+P,打开控制面板输入Terminal > Configure Default Build Task,选择g++.exe build active file:3.设置tasks.json内容如下:{ // See https原创 2020-12-14 20:51:23 · 2934 阅读 · 0 评论 -
Windows控制台常用指令
1.如何改变命令提示符当前路径刚打开CMD时,路径通常是当前用户名下的路径:直接使用cd d:是无法切换到其他驱动路径下的。需要使用驱动盘符加冒号d:另一种方式是使用cd /d 盘符移至上层目录:cd ..2.浏览当前目录下所有文件使用dir命令3.创建文件夹使用mkdir命令+文件夹名4.重命名文件或文件夹使用ren命令,ren old_name new_name5.复制文件使用命令copy source_file new_file 在复制过程中可以重命名。6.拷贝整原创 2020-12-14 16:38:53 · 6489 阅读 · 0 评论