![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
文章平均质量分 82
c和c++
牧秋羽
计算机爱好者
展开
-
Linux makefile 教程 非常详细
概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写m转载 2014-08-15 10:30:41 · 588 阅读 · 0 评论 -
Linux下gcc经验总结
1.gcc的常用参数:I(大写i)参数:添加头文件目录到索引目录;例如:-I /usr/local/include/L参数:添加链接库目录到索引目录;例如:-L /usr/local/lib/l(小写L):表示编译时添加链接库文件;例如:-ltest(参数与内容中间没空格)代表着连接(库名为test)链接库文件,库名和实际文件名是不同的,库名是文件名去掉开头的lib和结尾的.a或.so原创 2015-02-12 11:43:49 · 1741 阅读 · 0 评论 -
cmake使用
一、 基本使用安装:下载二进制包后可直接解压使用从源码安装则执行命令:./bootstrap; make; make install——尝试执行bootstrap失败使用:cmake dir_path,生成工程文件或makefile文件二、 概念out-of-source build,与in-source build相对,即将编译输出文件与源文件放到不同目录中;转载 2015-06-24 13:25:27 · 648 阅读 · 0 评论 -
struct和typedef
struct Test {int i;} ;解析:此处声明一个Test的结构体。使用:在C语言中:struct Test t(此处的struct不可省略),在C++中:Test t(可以省略struct)struct Test {int i;} test;解析:在C语言中:此处声明一个Test结构体,命名为test,即test = struct Test。在C++原创 2015-07-13 11:45:58 · 814 阅读 · 0 评论 -
_T("")宏的由来和ANSI和UNICODE编码
_T("")是一个宏,他的作用是让你的程序支持Unicode编码。因为Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双字节字符。Windows NT的所有与字符有关的函数都提供两种方式的版本,而Windows 9x只支持ANSI方式。如果你编译一个程序为AN原创 2014-07-25 17:03:42 · 1373 阅读 · 0 评论 -
关于VisualStudio性能分析数据中的独占样本数和非独占样本数的意义
VisualStudio中自带有Profile工具进行性能性能分析,其中用得比较多的数据是函数调用时间,它主要有独占样本数和非独占样本数两个指标,关于这两个指标代表的意义,MSDN的解释比较文艺:非独占样本数: 为函数收集的性能数据的总数,其中包括该函数调用的其他函数的性能数据。非独占转换次数: 在此函数(包括此函数调用的函数)的所有实例中发生操作系统(转换)事件的次数。当然,转载 2015-09-25 17:18:04 · 1857 阅读 · 0 评论 -
两种重载运算符
1. 操作符重载实现为类成员函数重载的操作符在类体中被声明,声明方式如同普通成员函数一样,只不过他的名字包含关键字operator,以及紧跟其后的一个c++预定义的操作符。可以用如下的方式来声明一个预定义的==操作符:class person{private: int age;public: person(int a){ this->age=a原创 2015-09-16 18:08:21 · 478 阅读 · 0 评论 -
C++模板
模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。 1.模板是一种对类型进行参数化的工具; 2.通常有两种形式:函数模板和类模板; 3.函数模板针对仅参数类型不同的函数; 4.类模板针对仅数据成员和成员函数类型不同的类。 使用模板的目的就是能够让程序员编写与类型无关的代码。比转载 2015-10-26 18:13:10 · 406 阅读 · 0 评论 -
struct/union内存对齐
(一)成员对齐。对于结构体内部成员有这样的规定:各成员变量存放 的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。各成员变量在存放的时候根据在结构中出现的顺序依次申请空间,同时按照上面的对齐方式调整位置,空缺的字节编译器会自动填充也就是padding。(二)然后,还要考虑整个结构体的对齐需求。ANSI C标准规定结构体类型要求结构体至少是其中的那个最大的基本类型元素原创 2016-01-27 14:52:33 · 1319 阅读 · 0 评论 -
两种封装模块方式的比较
一般情况下,我们用c++去写一个模块封装类,首要考虑的一个问题就是如何获取该模块的操作指针,在模块外部尽量减少限制和操作。多数情况我们去提供一个模块的静态方法,也可以理解为一个端口去得到本模块的指针,从而可以调用模块的的所有功能方法,包括初始化。下面总结两种封装方式的优劣:第一种封装:#include class test{public: ~test(){} void show()原创 2015-02-11 15:49:08 · 2297 阅读 · 0 评论 -
Lua和C语言的交互详解
1.前言Lua语言是一种嵌入式语言,它本身的威力有限;当Lua遇见了C,那它就展示了它的强大威力。C和Lua是可以相互调用的。第一种情况是,C语言拥有控制权,Lua是一个库,这种形式中的C代码称为“应用程序代码”;第二种情况是,Lua拥有控制权,C语言是一个库,这个时候C代码就是“库代码”。“应用程序代码”和“库代码”都使用同样的API来与Lua通信,这些API就称为C API。C API转载 2015-01-13 09:35:41 · 3613 阅读 · 0 评论 -
匿名空间的使用
当定义一个命名空间时,可以忽略这个命名空间的名称:namespce {char c;int i;double d;}编译器在内部会为这个命名空间生成一个唯一的名字,而且还会为这个匿名的命名空间生成一条using指令。所以上面的代码在效果上等同于:namespace __UNIQUE_NAME_ {char c;int i;double d;}us转载 2015-02-10 17:19:51 · 1750 阅读 · 0 评论 -
automake创建Makefile
使用automake主要会用到aclocal、autoscan、autoconf、autoheader和automake这几个命令。首先简略的说一下用automake生成makefile的步骤:(1)创建源代码文件,使用”autoscan”生成configure.scan文件,将其重命名为configure.ac,并做适当修改,然后使用”aclocal”命令生成aclocal.m4文件转载 2014-08-15 10:20:49 · 588 阅读 · 0 评论 -
fork函数的详细解释
头文件#include/*#包含*/#include/*#包含*/函数原型pid_t fork( void);(pid_t 是一个宏定义,其实质是int 被定义在#includesys/types.h>中)返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1函数说明一个现有进程可以调用fork函数创建一个翻译 2014-12-08 14:45:20 · 1589 阅读 · 0 评论 -
ar基本用法
当我们的程序中有经常使用的模块,而且这种模块在其他程序中也会用到,这时按照软件重用的思想,我们应该将它们生成库,使得以后编程可以减少开发代码量。这里介绍命令ar,用来对库操作。 ar命令可以用来创建、修改库,也可以从库中提出单个模块。库是一单独的文件,里面包含了按照特定的结构组织起来的其它的一些文件(称做此库文件的member)。原始文件的内容、模式、时间戳、属主、组等属性都保留在库文件中原创 2014-12-24 11:04:51 · 2553 阅读 · 0 评论 -
GDB调试命令总结
本文介绍Linux下GDB调试器常用的基本命令,方便平时查询,目前可能不完善,日后发现新命令再添加。1.源代码编译gcc -g target.c -o target这里面一个必要的步骤是:GCC的-g选项:让编译器将符号表(对应于程序的变量和代码行的内存地址列表)保存在生成的可执行文件中。这样才能在调试会话过程中引用源代码中的变量名和行号。2.基本GDB命令启动GDB:gd原创 2014-12-26 11:30:25 · 2254 阅读 · 1 评论 -
c和c++的指针变量输出与原理的实例
案例程序:void main() { int a = 100; int *ap = &a; printf("%p\n",&a);//输出:002AF744 printf("%p\n",ap);//输出:002AF744 printf("%d\n",*ap);//输出:100 printf("%p\n",&ap);//输出:002AF原创 2014-12-26 15:50:44 · 1224 阅读 · 0 评论 -
GDB调试时缺少glibc
Gdb调试时候弹出Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.107.el6.i686首先该提示意思是gdb缺少glibc-debuginfo的c调试库解决方案就是上诉提示中的use: debuginfo-install glibc-2.12-1.107.el6.i686这条命令安装,debuginfo-原创 2014-12-26 15:16:12 · 1902 阅读 · 0 评论 -
对于vs在x86平台和x64平台上的冲突问题
对于32位和64位平台编译经常会出现问题,如下总结的是vs平台编译相关的知识1.对于x86平台上编译的项目是无法在x64平台上调用的,同理对于x64平台上编译的项目也是无法在x86上调用的。2.在64位系统上,如果安装了x64的vc编译器的vs,则编译项目的时候可以配置两种编译平台。3.编译平台和目标调用平台必须保持一致,才能顺利编译。以下以配置x86平台为例:首先如果没有wi原创 2015-02-08 19:39:25 · 16812 阅读 · 1 评论 -
用gcc编译成可执行程序细节过程
#gcc hello.c该命令将hello.c直接生成最终二进制可执行程序a.out这条命令隐含执行了(1)预处理、(2)汇编、(3)编译并(4)链接形成最终的二进制可执行程序。这里未指定输出文件,默认输出为a.out。从上面我们知道GCC编译源代码生成最终可执行的二进制程序,GCC后台隐含执行了四个阶段步骤。GCC编译C源码有四个步骤:预处理----->原创 2014-08-14 11:55:54 · 2631 阅读 · 0 评论 -
sqlite3在android 操作返回readonly错误
近期使用sqlite3源代码编译了一个sqlite3的库跑在安卓平台上,但发现部分安卓机器会操作失败,返回readonly。经过核查所有需要设定的权限全部都有,经过长时间的排查,终于发现只有在anroid5.0的系统上才会出现。所以定位为系统兼容问题,又经过大量调试发现原因所在:在sqlite3源代码中引用到了一种系统库的数据类型 ino_t ,该数据类型在android5.0上的定义有问题,它在原创 2016-10-21 17:49:23 · 2389 阅读 · 2 评论