![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++编程
文章平均质量分 55
audio_mqiu
专注于移动互联网多媒体信号处理领域,研究与实现音频处理算法,关注音频处理前沿技术。欢迎同领域人士交流探讨,邮箱wutongluxjtu@outlook.com
展开
-
一个32位整数任意两个比特位交换的宏定义写法
原文出处:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=25272011&id=3658875今天看到一个很有意思而且很有技巧性的宏定义,和大家分享。#include #define bswap(data, m, n) \ (data & (1 << m)) == (data & (1 <<转载 2015-01-28 17:56:49 · 2047 阅读 · 0 评论 -
Linux 链接库编译与多重依赖
现有如下问题:我们在第三方动态库(比如 boost 库)的基础上,开发了自己的动态库供公司内部项目使用。在使用自己的这个动态库的时候,该如何进行编译呢?即,依赖链条是这样的情况下:程序–(依赖)–>libA.so–(依赖)–>libB.so该如何进行编译。为了研究这个问题,我们建立一个目录结构,写几个简单程序来模拟一下。以下内容将从构建动态库开始,一步步展示如何达成转载 2017-06-01 16:33:42 · 864 阅读 · 0 评论 -
linux下so动态库一些不为人知的秘密(上)
linux 下有动态库和静态库,动态库以.so为扩展名,静态库以.a为扩展名。二者都使用广泛。本文主要讲动态库方面知识。 基本上每一个linux 程序都至少会有一个动态库,查看某个程序使用了那些动态库,使用ldd命令查看 # ldd /bin/lslinux-vdso.so.1 => (0x00007fff597ff000)libselinux转载 2017-06-01 16:35:33 · 539 阅读 · 0 评论 -
linux下so动态库一些不为人知的秘密(中)
我们知道linux链接so有两种途径:显示和隐式。所谓显示就是程序主动调用dlopen打开相关so;这里需要补充的是,如果使用显示链接,上篇文章讨论的那些问题都不存在。首先,dlopen的so使用ldd是查看不到的。其次,使用dlopen打开的so并不是在进程启动时候加载映射的,而是当进程运行到调用dlopen代码地方才加载该so,也就是说,如果每个进程显示链接a.so;但是如果发布该程序时候忘记转载 2017-06-01 16:36:45 · 469 阅读 · 0 评论 -
Linux 依赖动态库 / 静态库的动态态库 / 静态库
一、 依赖动态库的动态库libfun.so依赖动态库libtest.so(libfun.so动态库里的函数intnothing()调用了libtest.so里的intmytest()函数),而main.exe又调用了libfun.so的函数int nothing()。 下面两种方式都能工作:1> 常用的方式g++ -shared -fPIC -o lib转载 2017-06-01 18:06:37 · 555 阅读 · 0 评论 -
C和C++之间库的互相调用
昨晚有个朋友问我关于在C中调用C++库的问题,今天午饭后,由于脖子痛的厉害而没有加入到我们组的“每天一战”的行列中去,所以正好将C和C++之间的库调用关系做个总结。1.extern "C"的理解:很多人认为"C"表示的C语言,实际并非如此,"C"表示的是一种链接约定,只是因C和C++语言之间的密切关系而在它们之间更多的应用而已。实际上Fortran和汇编语言也常常使用,因为它们也正好符转载 2017-06-02 10:44:12 · 447 阅读 · 0 评论 -
回调函数c++实现
Callback最本质的特征包括两点:注册和触发C++中如何将类成员函数作为回调函数使用,必须是静态方法吗?必须是静态成员函数或者全局函数来实现回调函数大概原因是普通的C++成员函数都隐含了一个传递函数作为参数,即this指针,C++通过传递this指针给成员函数从而实现函数可以访问C++的数据成员。由于this指针的原因,使得一个普通成员函数作为回调函数时就会因为隐含转载 2017-06-02 15:26:25 · 568 阅读 · 0 评论 -
C++ 回调函数的简单例子
调用端[html] view plain copy//下面的这个_stdcall很重要的 void _stdcall Test(int n, string str) //如果不定义全局变量,而定义在类中 则必须是 静态成员函数 { while(n-->0) coutn" "strendl; }转载 2017-06-02 15:28:31 · 995 阅读 · 0 评论 -
链接与运行时动态库依赖
The -L option supplies a colon-separated library path that is to besearched at LINK TIME for libraries. Thus cc -o foo foo.c -L/usr/local/lib -lfoomeans that either libfoo.a or libfoo.so should b转载 2017-06-02 17:50:46 · 450 阅读 · 0 评论 -
C++设计模式——单例模式
C++设计模式——单例模式问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中,会专门有一个日志模块,负责写日志,由于在系统的任何地方,我们都有可能要调用日志模块中的函数,进行写日志。那么,如何构造一个日志模块的实例呢?难道,每次new一个日志模块实例,写完日志,再delete,不要告诉我你是这么干的。在C++中,可以构造一个日志模块的转载 2017-06-08 17:50:02 · 402 阅读 · 0 评论 -
C++父子类继承时的隐藏、覆盖、重载
存在父子类继承关系时,若有同名成员函数同时存在,会发生隐藏、覆盖和重载这几种情况。对于初学者也比较容易混淆,为此,我整理了一下我的个人看法,仅供参考。希望对大家理解有帮助,也欢迎指正。1.父子类继承关系: 子类复制父类全部成员 首先,理解父子类的继承关系是怎样发生的。在此基础上就很容易理解它们之间的关系和区别。 每一个类有它自己的成员变量和成员函数,是一个独立的空间转载 2017-06-08 17:54:40 · 659 阅读 · 0 评论 -
如何用C语言封装 C++的类,在 C里面使用
本文给出了一种方法。基本思想是,写一个 wrapper文件,把 C++类封装起来,对外只提供C语言的接口,和 C++i相关的都在 wrapper的实现文件里实现。1. apple.h[cpp] view plain copy print? #ifndef __APPLE_H__ #define __APPLE_H_转载 2017-06-02 10:41:39 · 2860 阅读 · 1 评论 -
动态库(.so)链接静态库(.a)的情况总结
动态库(.so)链接静态库(.a)的情况总结 一般来说在链接时想要使用静态库有三种方法:1、link时加上 -static 选项;当加上 -static选项后,gcc会把所有用到的库都做静态连接。2、link时直接指定想要静态连接的.a文件的绝对路径。优点是除非.a文件不存在,否则肯定有效;缺点也是很明显,拿到其他机器上编译时,.a文件也必须在相同的路径下存放。3、转载 2017-06-01 18:08:24 · 560 阅读 · 0 评论 -
automake做工程管理总结
如需转载,请注明出处!最近看了下,网上关于automake使用鱼龙混杂,很多只是给出简单的单一文件编译(以一个main.c为例)。在实际的工程应用中,我们常将代码按照模块进行组织,所以本文将结合多目录automake组织,以一个小例子来进行总结。文件组织目录:examples | -- src | -原创 2017-08-18 17:27:40 · 377 阅读 · 0 评论 -
关于C语言的fprintf与fwrite使用区别
C语言把文件看作一个字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。根据数据的组织形式,可分为ASCII文件和二进制文件。ASCII文件又称为文本(text)文件,它的每个字节放一个ASCII代码,代表一个字符。二进制文件是把内存中的数据按其在内在中的存储形式原样输出到磁盘上存放。fprintf(fp, "%d", buffer); 是将格式化的数据写入文件fp转载 2017-05-26 16:59:11 · 540 阅读 · 0 评论 -
依赖静态库,编译生成动态库
如需转载请注明出处!直入主题,目标是依赖静态库,编译动态库,最终生成二进制文件。文件目录如下:文件内容组织:add.c#include "add.h"int add(int a, int b) { int c = a + b; return c;}add.h#ifndef __ADD__#define __AD原创 2017-03-09 18:50:34 · 6908 阅读 · 1 评论 -
python函数参数引用传递
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副转载 2016-12-08 09:52:42 · 923 阅读 · 0 评论 -
extern "C"用法详解
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般之包括函数名。 这个功能十分有转载 2015-01-14 11:39:11 · 605 阅读 · 0 评论 -
gcc编译链接动态库详解
比较详细的介绍了gcc编译链接动态库的原理。转载: http://kmoving.blog.163.com/blog/static/205049197201267113438532/一、GNU gcc的编译工具用法我们先来写一个简单的C程序:hello.c1. #include 2.3. void print_hello() {4. printf("Hell转载 2015-01-14 16:00:35 · 4486 阅读 · 0 评论 -
VS2008中Run-Time Check Failure#2 - Stack around the variable * was corrupted
VS2008创建工程,编译OK,运行结束退出主函数是弹出警告窗:原因 :Stack pointer corruption is caused writing outside the allocated buffer in stack memory. 即发生数组越界访问,导致堆栈破坏。解决方法 :This kind of error is detected原创 2015-04-10 16:55:18 · 946 阅读 · 0 评论 -
Linux 下 Eclipse编译找不到so库文件的解决方法
Linux下创建C/C++工程,依赖其他so库文件时,我们常习惯通过Project->Properties->C/C++ General ->Path and Symbols 来添加Include 目录和so目录及文件。如下图:编译工程时,会发现报错提示找不到链接so库文件。解决方法:通过如下方式添加依赖so目录及库文件:原创 2015-04-10 17:48:18 · 3465 阅读 · 1 评论 -
Linux下eclipse编译C++动态链接库报错问题解决
在使用Linux下Eclipse编译C++动态链接库程序时,出现错误信息如下:解决方法:项目属性中,compile设置中添加-fPIC的优化选项原创 2015-04-14 16:00:22 · 652 阅读 · 0 评论 -
Linux 编译C程序遇到依赖libm或libpthread
转载地址: http://blog.sina.com.cn/s/blog_7905bef10100u0kn.html http://blog.sina.com.cn/s/blog_53ed87c1010002p7.html使用math.h中声明的库函数还有一点特殊之处,gcc命令行必须加-lm选项,因为数学函数位于libm.s转载 2015-04-15 14:39:22 · 4879 阅读 · 0 评论 -
C++中delete和delete[]的区别
转载:http://www.cnblogs.com/charley_yang/archive/2010/12/08/1899982.html C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。 关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配转载 2015-04-17 17:25:13 · 586 阅读 · 0 评论 -
指针数组,数组指针与二维数组剖析
int *p[3]与int (*p)[3]的区别*p[3]这个是一个指针数组,它所代表的意思是数组中的每一个元素都是一个指针变量,而(*p)[3],p是一个指针变量,表示指向一个含有3个整型元素的一维数组。复制代码代码如下:int i,j; int a[2][3]={3,4,5,6,7,8}; // int *p[3] ; //表示一个数组,数组中转载 2015-05-06 17:24:45 · 5936 阅读 · 4 评论 -
gdb调试libtool封装的可执行文件
转载地址:http://www.cnblogs.com/ericsun/p/3168842.htmlhttp://www.gnu.org/software/libtool/manual/html_node/Debugging-executables.html3.4 Debugging executablesIfhellwas a complicated prog转载 2015-09-15 13:44:40 · 705 阅读 · 0 评论 -
求局部极值的小技巧
nbr = np.zeros(len(vec)+1, dtype=bool)nbr[0] = Truenbr[1:-1] = np.greater_equal(vec[1:], vec[:-1])maxmask = (nbr[:-1] & ~nbr[1:])原创 2015-11-11 11:42:53 · 1433 阅读 · 0 评论 -
c语言 float 保留小数点后两位数字
挺实用的小技巧。float sp = 36.51647;sp=( (float)( (int)( (sp+0.005)*100 ) ) )/100;转载地址:http://blog.163.com/szliug@yeah/blog/static/1417740192013429344042/转载 2016-02-14 15:24:18 · 35372 阅读 · 0 评论 -
C/C++相互调用
转载地址: http://blog.chinaunix.net/uid-24118190-id-2985318.html在项目中融合C和C++有时是不可避免的,在调用对方的功能函数的时候,或许会出现这样那样的问题。近来在主程序是C语言,而调用C++功能函数的时候,C++的*.h头文件都能找到,功能函数也都定义了,最重要的是,单独编译C++的时候完全没有问题,但当用主程序的C调用C+转载 2015-04-14 14:57:18 · 1088 阅读 · 0 评论 -
基于内容-基于音频特征的音频检索
如需转载请注明出处!一. 算法可用性1. 能够由片段识别主体2. 检索准确率高3. 抗噪性强 二. 算法基本原理 离线阶段,对音频数据库中所有音频样本提取指纹,构建hash table;在线阶段,通过对待查询音频提取相同规则指纹并构建hash,在hash table中查找指纹匹配,并通过一定的规则进行匹配度量。良好的指纹特征包含以下几个特性:(1) 时原创 2016-10-08 10:12:44 · 6028 阅读 · 1 评论 -
c++对象成员函数返回自身引用时出现的诡异问题及解决办法
list.h (实际上是数据结构顺序表的一个例子,为了展现问题,我简化了部分代码,只留下插入和打印)#includeusing namespace std;class List{public: List(int max_list_size) { max_size=max_list_size; data=new int[max_size];转载 2017-09-01 17:00:35 · 1185 阅读 · 0 评论