- 博客(36)
- 资源 (1)
- 收藏
- 关注
原创 Qt警告:Missing reference in range-for with non trivial type (QString) [clazy-range-loop]
Qt编程中遇到Missing reference in range-for with non trivial type (QString) 的警告,感到莫名其妙,原始代码如下, QStringList fileList = QFileDialog::getOpenFileNames(this, title, curPath, filter); for (QString i : fileList) { ui->plainTextEdit->appe.
2021-12-16 20:31:48
2673
1
原创 C++虚函数实现原理和虚函数表
C++规定了虚函数的行为,但将实现方法留给了编译器作者。通常,编译器处理虚函数的方法是:给每个对象添加一个隐藏成员。隐藏成员中保存了一个指向函数地址数组的指针。这种数组称为虚函数表(virtual function table, vtbl)。虚函数表中存储了为类对象进行声明的虚函数的地址。例如,基类对象包含这样一个指针,该指针指向基类中所有虚函数的地址表。派生类对象将包含一个指向独立地址表的指针。如果派生类提供了虚函数的新定义,该虚函数表将保存新函数的地址;如果派生类没有重新定义虚函数,该vtbl将保.
2021-12-09 21:16:14
769
原创 fread, fwrite和fflush
fread和fwrite是标准IO,在调用文件IO的基础上封装了用户空间缓冲区。这样可以减少系统调用的次数,在频繁使用IO的场景中减少系统开销。因此,调用fwrite向文件中写入数据时,数据不会立即被写入到文件中,而是先被写入到内存中的缓冲区,当缓冲区满或者调用fclose()或者调用fflush()后才会将内存缓冲区中的数据写入到目标文件中。其实,在调用fflush()后,再次调用fsync()方能保证fwite写入的数据写入到磁盘中。调用fread()会一次性从文件中读出相当多的数据到用户.
2021-11-20 16:07:41
1508
原创 Linux 无名管道使用示例
/** * @file pipe_no_name.c * @author your name (you@domain.com) * @brief 无名管道 * 无名管道用于具有亲缘关系的进程间通信 * @version 0.1 * @date 2021-11-20 * * @copyright Copyright (c) 2021 * */#include <stdio.h>#include <unistd.h>#include <sys/typ.
2021-11-20 15:43:22
290
原创 Linux父子进程的地址空间
Linux不同进程拥有独立的虚拟地址空间。即使是父子进程也是如此。当父进程创建一个子进程时,子进程会复制父进程地址空间中的大部分数据资源,包括代码段、变量和文件描述符等(采用写时复制机制)。因此会有下面有趣的现象,#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <wait.h>int main(){ char buffer[64] = {0
2021-11-20 14:06:06
3760
原创 VSCODE C/C++最小配置
平台:Ubuntu使用VSCODE 编写C/C++ 代码,需要至少配置好以下三个文件:c_cpp_properties.json, launch.json, tasks.jsonc_cpp_properties.json 用来配置头文件路径,编译器路径,以及使用的C/C++ 标准等。当VSCODE没有生成该文件时,可以使用"Ctrl + Shift + P" 调出命令搜索,输入"C/C++:Edit", 然后点击第一个选项即可打开该json配置文件。{ "configurati
2021-09-10 10:07:47
66667
原创 curl源码编译安装
平台:Ubuntu 20方法一:apt-get使用内置的apt下载工具进行安装,sudo apt-get install curl方法二:从官网下载压缩包在官网可以找到curl的多个版本,http://curl.haxx.se/download/wget https://curl.haxx.se/download/curl-7.55.1.tar.gztar -xzvf curl-7.55.1.tar.gzcd curl-7.55.1./configurema
2021-09-09 15:08:26
70208
原创 C语言实现简单HTTP 服务器
开发平台:Microsoft Visual Studio Community 2019#include <stdio.h>#include <winsock2.h>#include <string.h>#include <io.h>#pragma comment(lib, "ws2_32.lib")/** 网络编程 包含头文件: winsock2.h* 引用库文件: ws2_32.lib*/char r
2021-09-08 18:30:18
69774
原创 sprintf 函数详解
printf函数大家都熟悉,但是printf一般打印到标准输出,在需要整理、格式化字符串时,sprintf就大显身手了。例如,在处理传感器数据时,为了将得到的数据整合成特定的格式通过网络发送出去,char buffer[100] = { 0 };sprintf(buffer, "temperature: %f; humidity:%f\r\n", tempData, humiData);send(clientSocket, buffer, strlen(buffer));又例如,在进行HT
2021-09-08 17:16:16
89639
1
原创 C语言 extern使用
如果在a.c文件中定义了int a全局变量,并且需要在b.c中使用该变量,可以通过在b.c中用extern 声明 int a变量的方式实现,如下,a.cint a;a = fun();b.cextern int a;
2021-06-20 19:35:54
66879
原创 字符串数组与指针 sizeof/strlen 大小区别
#include<stdio.h>#include<stdlib.h>#include<string.h>int main(void){ char ss1[] = "ABCDEFGHIGKLMN"; printf("The contend is:%s\r\n", ss1); printf("The num of mystr is(strlen):%d\r\n", strlen(ss1)); printf("The num of .
2021-06-20 19:29:01
66497
原创 C语言文件读取 判断fopen结果时 犯的小错误
if( (fp = fopen("./demo","r") == NULL ) ){ printf("Fail to open file!\n"); exit(0); }
2021-06-19 13:10:48
66815
原创 将C文件改为CPP,头文件不识别问题
在项目中需要将一个C文件重命名为CPP文件,但是修改名称后缀后,编译器就无法找到头文件中定义的函数了。这是由于编译器对C代码和C++代码的函数名称处理方式不同导致的,使用以下方法le
2021-06-14 15:05:42
69020
原创 STM32 PWM输出极性的实验
在PWM模式2中,CNT<CCR时输出无效电平,CNT>CCR时输出有效电平。PWM的有效输出电平在TIMx_CCER寄存器设置。
2021-06-01 13:14:54
3033
原创 VSCODE编写STM32代码配置
VSCODE提供了丰富实用的插件,可以大幅提升编写代码的体验和效率。下面简单说明如何使用VSCODE编辑Keil中导出的代码(仅编辑),消除恼人的报错,将上述Keil目录结构拖动到VSCODE打开,在main函数中,如果添加2、3行的宏定义,下面的代码会提示找不到定义。但是在Keil中我们确实没有2、3行的宏定义,为什么可以成功编译呢?原因是在stm32f10x.h头文件中,当定义了“USE_STDPERIPH_DRIVER”宏定义时,便会引入"stm32f10x_conf.h"头文
2021-04-16 09:41:05
68140
原创 Windows与Linux下动态链接库的区别
本文所述基于以下两点,使用CMake进行项目的构建 Windows下使用MinGW32 g++,Linux下使用GNU g++一、WindowsWindows的动态链接库的命名格式为lib*.dll。使用CMake创建动态链接库时,会生成两个文件,比如下面代码是在CMakeLists.txt中描述的依赖关系,在cmake构建过程中,会在上下文规定的路径中寻找“libcurldll.a”、“libbase64.a”,即在前后分别自动添加上“lib”和“.a”。libcurldll.
2021-02-27 19:24:31
67029
原创 MinGW g++与GNU g++的区别——memcpy
#pragma once#include <cstdint>#include <string>memcpy( _base64, cache, 4);在Windows下使用MinGW编译上述代码,没有问题。在Ubuntu Linux下使用GNC g++编译时报错如下,memcpy函数未声明。添加<cstring>头文件即可解决,看来MinGW的函数库与GNU是有差别的。...
2021-02-27 17:09:26
66175
原创 C++自动生成设计资料目录
#include <iostream>using namespace std;int main(){ string folderPath1 = ".\\设计资料\\BOM"; string folderPath2 = ".\\设计资料\\gerber"; string folderPath3 = ".\\设计资料\\silk"; string command; command = "mkdir " + folderPath1; .
2021-02-25 10:46:25
902
原创 记录一个C++头文件包含顺序的小bug
// A simple program that computes the square root of a number#include <cmath>#include <iostream>#include <string>#include "TutorialConfig.h"#ifdef USE_MYMATH#include "MathFunctions.h"#endif如上代码,由于“USE_MYMATH”的宏定义在“TutorialConfi.
2021-02-24 22:25:08
66121
原创 STM32F103固件库源码解析——RCC_APB2PeriphClockCmd
RCC_APB2PeriphClockCmd函数用来开启或关闭APB2外设时钟,该函数总览如下,/** * @brief Enables or disables the High Speed APB (APB2) peripheral clock. * @param RCC_APB2Periph: specifies the APB2 peripheral to gates its clock. * This parameter can be any combination o
2021-02-06 15:54:18
18667
1
原创 STM32F103固件库源码解析——GPIO配置
首先,需要熟悉下一些重要的杂散的知识。上图是一个标准的GPIO配置过程。GPIO_InitTypeDef是一个结构体,可以看出,CRL寄存器的每4位控制一个GPIO的工作状态。上面的枚举类型设计得很巧妙,其用低四位代表具体输入/输出模式,低四位右移两位即是对应的寄存器配置,如下:(GPIO_Mode_AIN & 0X0F) >> 2 = 00B(GPIO_Mode_Out_PP & 0X0F) >> 2 = 00B(G
2021-02-06 14:23:45
67566
原创 关于三极管Ube在电路中变化的疑问
主要疑问:如图1,在分析静态工作状态的时候认为Ube是不变的(一般为0.7V),从而求得IBQ,ICQ,UCEQ的值,进而确定电阻元件的参数。但是,江湖上又流传着这样一句话:ui变化引起uBE变化,uBE变化引起iB变化,从而引起iC变化。那么可怕的矛盾来了,不是说Ube是不变的吗,那么交流信号叠加上来后,Ube的电压会改变吗。并且在分压式偏置放大电路的稳定静态工作点的分析中,也存在这样的疑问,Ube为什么会减小。图1 基本共射放大电路图2 分压式偏置放大电路的直流工作电路图3 分压
2020-11-09 18:38:08
14227
7
原创 OpenCV使用Mat创建矩阵并输出
#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <iostream>using namespace std;using namespace cv;//包含cv命名空间int main(){ Mat r = Mat(10, 4, CV_8UC2); randu(r, Scalar::all(0), Scalar::all(255)).
2020-08-21 15:28:31
66999
原创 C++的头文件包含问题
此处记录一个小知识。这是练习代码的项目结构:在Hero.h中包含了#include <string>#include <iostream>当在Hero.cpp与main.cpp中包含Hero.h时,就不用再次包含上述两个头了。(就是不知道这样规范不规范...)...
2020-07-08 21:17:18
66014
原创 C++ 类成员函数可以访问所有类对象的私有数据
在学习C++ Primer Plus的过程中,遇到一个有趣的问题。众所周知,类的私有变量是无法在类外直接访问的,只能通过类的成员函数访问。且看下面一段代码:class Stock{private: double total_val;//这是私有的哦~public: Stock();//默认构造函数 Stock(const char* co, int n = 0, double pr = 0.0); ~Stock();//析构函数 const Stock& topval(
2020-06-22 15:25:29
6228
3
原创 OpenCV入坑--003
贴一下鼠标绘制矩形的代码和效果图。#include <opencv2/opencv.hpp>using namespace cv;#define WINDOW_NAME "【程序窗口】" //为窗口标题定义的宏//---------------【全局函数声明部分】--------------------// 描述:全局函数的声明//-------------------------------------------------------void on_MouseHand
2020-06-13 23:39:34
65992
原创 OpenCV入坑--002
配置好环境后,试一下书中提供的例程代码:#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"using namespace cv;int main(){ Mat srcImage = imread("23.jpg"); imshow("【原图】", srcImage); Mat dstImage; blur(srcImage,dstImage,Size(7,7)); imshow
2020-06-12 14:42:21
66093
原创 OpenCV入坑--001
准备入坑OpenCV,完全是个人兴趣,买了本毛星云老师的《OpenCV3编程入门》,一边学习,一边记录。====================================================================================我下载的是Visual Studio2019,OpenCV版本是3.4.10。开发环境并不是跟书中的一样,所以需要自己做一些调整。我下载的OpenCV没有X86文件夹……所以在配置的时候只能选择X64文件夹里的lib。下载的
2020-06-12 11:28:32
66145
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人