![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++
文章平均质量分 56
涵盖基础语法、类、标准模板库
熠熠微光
这个作者很懒,什么都没留下…
展开
-
【C/C++】第一次在此定义,多重定义 multiple definition of
报错screenshot.o:在函数‘OnvifClientDevice::GetDNS(_tds__GetDNSResponse&)’中:screenshot.cpp:(.text+0x390): multiple definition of `OnvifClientDevice::GetDNS(_tds__GetDNSResponse&)’ptzcontrol.o:ptzcontrol.cpp:(.text+0xa0):第一次在此定义问题调查一个头文件 a.h 中函数声明且定义转载 2022-01-06 16:06:05 · 1385 阅读 · 0 评论 -
【C/C++】监控系统内存代码
项目代码用的,为了方便以后回顾,记录一下#include <stdio.h> #include <stdint.h>#include <stdlib.h>#include <pthread.h>#include <unistd.h> #include <string.h>#include <sys/mman.h>#include <fcntl.h>#define MRYRATIO 100#de原创 2021-12-28 19:35:26 · 798 阅读 · 0 评论 -
【C/C++】gettimeofday()函数:获取当前时间
头文件:#include <sys/time.h> #include <unistd.h>定义函数:int gettimeofday (struct timeval * tv, struct timezone * tz);函数说明:gettimeofday()会把目前的时间有tv 所指的结构返回,当地时区的信息则放到tz 所指的结构中。timeval 结构定义为:struct timeval{ long tv_sec; //秒 long tv转载 2021-08-22 18:29:10 · 2659 阅读 · 0 评论 -
【C/C++】程序性能优化
码个坑,后面来填……原创 2021-05-25 19:06:18 · 441 阅读 · 0 评论 -
【C/C++】C语言volatile关键字详解
volatile 是易变的、不稳定的意思。很多人根本就没见过这个关键字,不知道它的存在。也有很多程序员知道它的存在,但从来没用过它。我对它有种“杨家有女初长成,养在深闺人未识” 的感觉。volatile 关键字和const 一样是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。先看看下面的例子:int i=10;int j = i;//(1)语句i转载 2021-05-25 18:33:14 · 443 阅读 · 0 评论 -
【C/C++】性能优化之打点计时(纳秒级)
目的:加时间戳打印是为了方便快速对性能耗时进行测试比如想要测试printf这个函数调用的耗时bind_core(4);for(int i=0;i<MAX_SAMPLES;I++){ timing_now(now_tsc0); printf("11111111"); timing_now(now_tsc1); GATHERING_NS(series0,now_tsc0,now_tsc1,NULL);}操作步骤:隔核绑核加一个循环在printf前加开始时间戳在printf后原创 2021-05-18 13:57:50 · 1141 阅读 · 0 评论 -
【C/C++】extern、static、const
文章目录一、extern三、extern 和 const一、extern如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有明显的区别:extern int f(); int f();当然,这样的用处还是有的,就是在程序中取代include “*.h”来声明函数,在一些复杂的项目中,我比较习惯在所有的函数声明前添加extern修饰。关于这样做的原因和利弊可见下面的这个例子:“用extern修饰的全局变量”(1) 在test1.h原创 2021-04-16 11:11:11 · 516 阅读 · 0 评论 -
【C/C++】C++输出迭代器的地址
&*iterator 或 std::addressof(*iterator)原创 2021-04-02 17:55:12 · 1201 阅读 · 0 评论 -
【C/C++】gcc/g++参数详解
gcc 与 g++ 分别是 gnu 的 c & c++ 编译器 gcc/g++ 在执行编译工作的时候,总共需要4步:1、预处理,生成 .i 的文件[预处理器cpp]2、将预处理后的文件转换成汇编语言, 生成文件 .s [编译器egcs]3、有汇编变为目标代码(机器代码)生成 .o 的文件[汇编器as]4、连接目标代码, 生成可执行程序 [链接器ld]参数详解-x language filename设定文件所使用的语言, 使后缀名无效, 对以后的多个有效。也就是根据约定 C 语言的后缀名原创 2021-03-30 20:14:16 · 864 阅读 · 1 评论 -
【C/C++】字节存储排序:大端和小端的判别及转换
当前的存储器,多以byte为访问的最小单元,当一个逻辑上的地址必须分割为物理上的若干单元时就存在了先放谁后放谁的问题,于是端(endian)的问题应运而生了,对于不同的存储方法,就有大端(big-endian)和小端(little- endian)两个描述。字节排序按分为大端和小端,概念如下大端(big endian):低地址存放高有效字节,即网络字节序。小端(little endian):低字节存放低有效字节,即主机字节序。现在主流的CPU,intel系列的是采用的little endian的格式转载 2021-03-30 19:10:40 · 10400 阅读 · 0 评论 -
【C/C++】void *无类型指针的使用
void 指针是一种特殊的指针,表示为“无类型指针”,在 ANSI C 中使用它来代替char*作为通用指针的类型。由于 void 指针没有特定的类型,因此它可以指向任何类型的数据。也就是说,任何类型的指针都可以直接赋值给 void 指针,而无需进行其他相关的强制类型转换,如下面的示例代码所示:void *p1;int *p2;…p1 = p2;虽然如此,但这并不意味着可以无需任何强制类型转换就将 void 指针直接赋给其他类型的指针,因为“空类型”可以包容“有类型”,而“有类型”则不能包容“空原创 2021-03-25 10:34:56 · 2630 阅读 · 0 评论 -
【C/C++】程序启动后马上停止,程序崩溃并出现core文件
博主是Linux C/C++开发,这篇文章用于记录工作中的一点经验QA提出这个bug后,交付我来修改,一开始我并没有复现此bug。但当我手速够快,程序一启动就马上停止时便会稳定复现根据生成的core文件,查看bt堆栈信息,可以锁定到线程的jion()处查看源代码if(pThread) { pThread->join(); delete pThread; pThread = nullptr;}第一步,修改join()为detach(),再尝试复现,但程序并未崩溃,由此推测线程卡原创 2021-03-03 16:51:59 · 577 阅读 · 1 评论 -
【C/C++】链接时报错:undefined reference to ‘xxxxxxxxxxxx‘ (对……未定义的引用)的解决办法
大致意思是这样:有一个类 class test,test.h 中有个static function() 和一个 static std::map M;现在在 test.cpp 中实现了 function ,并在函数中使用了 M ,但 M 报错 undefined reference to 'test::M';解决办法:需要在 test.cpp 中声明一下 std::map <> test::M;扩展:C++静态成员的使用C++中的静态成员(静态成员函数和静态数据成原创 2021-01-26 16:24:21 · 2206 阅读 · 0 评论 -
【C/C++】alloca、malloc、calloc、realloc的区别
一、内存分配方式:1、从静态存储区域分配内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量、static变量2、在栈上创建在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放,栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限3、从堆上分配,也称动态内存分配程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存,动态内存的生存期由用户决定,使用非常灵原创 2020-12-24 19:56:23 · 1339 阅读 · 1 评论 -
【C/C++】C++ char[]字符数组和string字符串拷贝之间的差异
如图所示原创 2020-11-13 17:45:43 · 369 阅读 · 0 评论 -
【C/C++】预处理器指令#pragma学习笔记
在所有的预处理指令中,#pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma 指令对每个编译器给出了一个方法,在保持与C 和C ++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。其格式一般为:#pragma para其中para 为参数,下面来看一些常用的参数。参数类型一、#pragma message二、#pragma code_seg三、#pragma onc原创 2020-11-12 16:41:58 · 678 阅读 · 0 评论 -
【C/C++】C++ string::substr()的注意事项
该函数是用来拷贝某段字符串1、格式:string.substr (pos , len) ;2、解释:返回一个字符串,包含从pos位置起拷贝的len个字符3、注意事项:若pos超过string的大小,则会抛出 out_of_range的异常若pos+len超过了string的大小,则会调整len的值,只拷贝到string的结尾若len超过了string的大小,则程序在此处发生访问错误的崩溃...原创 2020-11-03 17:11:30 · 700 阅读 · 0 评论 -
【C/C++】const char*, char const*, char*const 的区别
Bjarne在他的The C++ Programming Language里面给出过一个助记的方法:把一个声明从右向左读。char * const cp; ( * 读成 pointer to ) cp is a const pointer to char const char * p; p is a pointer to const char; char const * p;同上因为C++里面没有const*的运算符,所以const只能属于前面的类型。C++标准规定,const关键字放在类转载 2020-10-23 15:21:14 · 415 阅读 · 0 评论 -
【C/C++】__asm__关键字
在公司的代码学习中看见这么几行:__asm__("movl %%esp,%0":"=r"(myesp));查阅资料后得知C++ asm是一个在C++代码中嵌入汇编指令的关键字格式如下:asm ("Assembler");//Assenmbler指汇编指令/* *你会看到“asm”变成了关键字样式的字体 *汇编指令由字符串方式填在括号里 *有的编译器会把嵌入的汇编指令单独放在一个文件里编译 *///另外插入多条汇编语句:asm("mov eax,1\n""leave\n""原创 2020-09-17 14:32:26 · 4273 阅读 · 0 评论 -
【C/C++】浅谈const
C语言中const修饰的量是常变量,它与普通变量的编译方式一样,唯一的区别是常变量定义后不能做左值。C++中const修饰的才是常量。1、 const修饰的变量是常量还是变量对于这个问题,很多同学认为const修饰的变量是不能改变,结果就误认为该变量变成了常量。那么对于const修饰的变量该如何理解?下面我们来看一个例子:int main{char buf[4];const int a = 0;a = 10;}这个比较容易理解,编译器直接报错,原因在于“a = 10;”这句话,对con原创 2020-08-10 20:42:57 · 148 阅读 · 0 评论 -
【C/C++】string、char *、char[]的转换
因项目中经常使用,所以记录一下,以便review文章目录一、string转char *1、data()2、c_str()3、copy()二、char *转string三、string转char[]四、char[]转string一、string转char *string转char *主要有三种方法:data(); c_str(); copy();1、data()string str = "hello";const char* p = str.data();//加const 或者用char * p原创 2020-08-10 20:30:23 · 191 阅读 · 0 评论 -
【C/C++】调用执行本地exe文件的方法
#include <windows.h> int main(void){ WinExec("C:\\Users\\Desktop\\新建文件夹\\NoClose.exe", SW_SHOWNORMAL); return 0;}运行程序用到了 WinExec 函数,其具体用法见微软 MSDN:WinExec function (Windows)原创 2020-08-07 18:39:45 · 885 阅读 · 0 评论 -
【C/C++】记录VS2015+QT项目中遇到的一些坑
1、新建QT Class参考:Qt5+vs2015无法添加Qt类的问题2、当ClientAutoUpdate.ui需要调用error.ui时先在ClientAutoUpdate.h里包含error的头文件#include "error.h"然后对error实例化ClientAutoUpdate.h里:private:error *err;ClientAutoUpdate.cpp里err = new error;参考:Qt技巧:多窗口互相调用3、出现类“error”不存原创 2020-08-05 16:34:00 · 520 阅读 · 0 评论 -
【C/C++】C++实现在Windows下对磁盘中文件和文件夹的创建、复制、移动、删除操作
1、需要包含的头文件#include "windows.h"#include "cstdlib"#include <iostream>2、创建操作CreateDirectoryA("E:/test", 0); //创建文件夹CreateFileA("E:/new.txt", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); //创建文件3、复制操作原创 2020-07-30 15:47:23 · 2741 阅读 · 1 评论 -
【C/C++】利用libcurl库进行http通讯网络编程
一、LibCurl基本编程框架libcurl是一个跨平台的网络协议库,当前支持http,https,ftp,gopher,telnet,dict,file,和ldap协议。也支持HTTPS证书授权,HTTP POST, HTTP PUT,FTP 上传(当然你也可以使用PHP的ftp扩展),HTTP基本表单上传,代理,cookies,和用户认证官网:https://curl.haxx.se/在基于LibCurl的程序里,主要采用callback function (回调函数)的形式完成传输任务,用户在启转载 2020-07-24 14:21:45 · 2202 阅读 · 0 评论 -
【C/C++】STL map中erase的正确用法
STL的map里有一个erase方法用来从一个map中删除掉迭代器指示的结点如map<string,string> mapTest;auto it=mapTest.find(key);mapTest.erase(it);像上面这样只是删除单个节点,map的行为不会出现任何问题但是当在一个循环里用的时候,往往会被误用,那是因为使用者没有正确理解iterator的概念像下面这样的一个例子就是错误的写法for(auto it=mapTest.begin();it!=mapTest.e原创 2020-07-23 16:33:49 · 1175 阅读 · 0 评论 -
【C/C++】int main(int argc,char* argv[])详解
argc是命令行总的参数个数argv[]是argc个参数,其中第0个参数是程序的全名,之后的参数是命令行后面跟的用户输入的参数比如: int main(int argc, char* argv[]) { int i; for (i = 0; i<argc; i++) cout<<argv[i]<<endl; return 0; } 执行时敲入F:\MYDOCU~1\.转载 2020-07-22 10:41:11 · 549 阅读 · 0 评论 -
【C/C++】C++中inline的用法
1、引入inline关键字的原因2、inline使用限制3、inline仅是一个对编译器的建议4、建议:inline函数的定义放在头文件中5、类中的成员函数与inline6、inline 是一种“用于实现的关键字”7、慎用inline8、总结1、引入inline关键字的原因在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数。栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间。在系统下,栈空间是有限的,假如频繁大量的使.转载 2020-07-16 19:30:51 · 188 阅读 · 0 评论 -
【C/C++】Linux C/C++面试经验问题
讲一下浅拷贝与深拷贝什么是虚函数虚函数与纯虚函数的区别new 和 malloc 的区别什么是多态static 关键字的作用static const 和 const 区别原创 2020-06-24 18:00:10 · 241 阅读 · 0 评论 -
【C/C++】浅谈C++多态
浅谈C++多态什么是多态?虚拟继承函数复用那什么时候会用到多态呢?什么是多态?多态是C++三大特性之一,要理解多态,首先得知道什么是多态。多态是指父类指针指向子类对象,实质上就是类的虚拟继承和函数复用。虚拟继承虚拟继承是指添加了virtual关键字的类成员:class A{public:**virtual** void func1(int a){ cout<<"this is A"<<endl;}}函数复用如父类对象有func1函数,子类对象继承自父类cl原创 2020-06-03 11:46:47 · 215 阅读 · 0 评论 -
【C/C++】C++ 11 多线程学习总结
包含头文件 #include <thread> 创建线程 t1:thread t1(函数名); 主线程等待t1线程结束后再运行 : t1.join() 主线程不需要等待t1线程结束: t1.detach() *线程一旦被detach便不能再join 判断线程能否 join :t1.joinable() *线程对象不能被赋值 “ = ” , 只能被移动 “ move...原创 2020-04-07 02:35:26 · 188 阅读 · 0 评论