C/C++
alan00000
这个作者很懒,什么都没留下…
展开
-
堆与栈(非数据结构)
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。每个进程所分配的栈空间通常很小,linux下可以用 ulimit -s 查看,单位K原创 2016-09-21 18:15:57 · 472 阅读 · 0 评论 -
User Header Search Paths 与 Header Search Paths
这边blog 简单介绍一下 Header Search Paths. 根据苹果文档(https://developer.apple.com/library/mac/documentation/developertools/Conceptual/XcodeBuildSystem/300-Build_Settings/bs_build_settings.html#//apple_r转载 2015-05-22 20:52:00 · 6800 阅读 · 0 评论 -
C++ 文件读写
在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结:这里主要是讨论fstream的内容:[java] view plaincopyprint?#include ofstream //文件写转载 2015-05-08 20:05:23 · 506 阅读 · 0 评论 -
用宏区分操作系统
编译器GCC#ifdef __GNUC__#if __GNUC__ >= 3 // GCC3.0以上Visual C++#ifdef _MSC_VER(非VC编译器很多地方也有定义)#if _MSC_VER >=1000 // VC++4.0以上#if _MSC_VER >=1100 // VC++5.0以上#if _MSC_VER >=1200 // VC转载 2015-04-02 18:18:12 · 3033 阅读 · 0 评论 -
openssl aes 加密解密示例程序
/** aes.cc* - Show the usage of AES encryption/decryption*/ #include #include #include #include int main(int argc, char** argv) { AES_KEY aes; unsigned char key[AES_BLOCK_SIZE];转载 2015-03-13 15:31:10 · 8773 阅读 · 1 评论 -
openssl AES 加密算法及代码实例
一、AES算法简介1、AES算法介绍 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称 Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS转载 2015-03-13 15:29:14 · 7309 阅读 · 0 评论 -
char 与 unsigned char的本质区别
在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别 首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-128~127, unsigned char没有符号位,因此能表示0~255,这个好理解,8个bit,最多256种情转载 2015-03-11 18:06:21 · 582 阅读 · 0 评论 -
修订版的“将vim改造为IDE”
本文在原文基础上修订而成,故为转载 工欲善其事,必先利其器。一个强大的开发环境可以大大提高工作效率。好吧,我知道这是废话。。。不过,我想一定有很多跟我一样打算进入Linux平台开发的新手,一开始都为找不到一个像Windows下的VS那样可以一键安装并且功能几乎完美无缺的开发工具而郁闷不已,甚至打算收回刚刚迈出的脚步。所幸的是,通过几天努力,我总算配置出了一个功能完备的基于Vi转载 2014-12-19 18:12:07 · 587 阅读 · 0 评论 -
VS2010下Cannot find or open the PDB file 问题的解决
VS2010下Cannot find or open the PDB file 问题的解决原创 2014-08-11 17:44:05 · 55333 阅读 · 11 评论 -
本机开发Native Development:Invalid path for NDK
打开window菜单下的preference选项。选择Android,Native Development(本地开发) 选择你的NDK安装目录。但是,这个插件目前仅支持ndk的r4和r5版本,更高版本会提示这个路径无效。其实,插件只是需要这个参数向PATH中添加这个路径,但是不设置这个路径会导致插件工作不正常。出现Invalid path for NDK无效的原因是它验证了一个gcc.转载 2014-08-06 10:15:05 · 1319 阅读 · 1 评论 -
This Android SDK requires Android Developer Toolkit version 20.0.0 or above
本人最近在操作更新ANDROID SDK时出现类似于题目中的错误,是一启动ECLIPSE时。但是,我现在只是想恢复到原先的开发环境。于是找到本文,方法有效!!!windows 下面安装Android虚拟机,有时候选择更新SDK后,在Eclipse preference里指向android_sdk_windows_x86时。会出现诸如This AndroidSDK requires A转载 2014-08-06 10:11:41 · 588 阅读 · 0 评论 -
新版NDK环境搭建(免Cygwin,超级快)
以前做Android的项目要用到NDK就必须要下载NDK,下载安装Cygwin(模拟Linux环境用的),下载CDT(Eclipse C/C++开发插件),还要配置编译器,环境变量... 麻烦到不想说了,Shamoo在网上查了一下资料,发现了一个超级快配置NDK的办法。 Step1:到Android官网下载Android的开发工具ADT(Android Development转载 2014-08-06 11:18:23 · 7265 阅读 · 0 评论 -
arm-linux-androideabi-gcc 预定义宏(编译器版本4.8)
打印方法:touch test.carm-linux-androideabi-gcc -E -dM -c test.c >> marco_arm.txt#define __DBL_MIN_EXP__ (-1021)#define __HQ_FBIT__ 15#define __UINT_LEAST16_MAX__ 65535#define __ARM_SIZEOF_WCHAR_T原创 2015-07-31 20:24:45 · 3450 阅读 · 0 评论 -
gcc 预定义宏(x86-64)
打印方法:touch test.cgcc -E -dM -c test.c >> marco_x86_64.txt#define __DBL_MIN_EXP__ (-1021)#define __UINT_LEAST16_MAX__ 65535#define __ATOMIC_ACQUIRE 2#define __FLT_MIN__ 1.17549435082228750797e原创 2015-07-31 20:26:39 · 6813 阅读 · 0 评论 -
使用 googlebreak pad 解析 crash
0. 重命名符号表文件跟crash的模块名称一致 如 libtest.so1. dump_syms libtest.so > libtest.so.sym2. head -n 1 libtest.so.sym打印信息如下:MODULE Linux arm CF68A19897FE1C38BB17D9228D8C5C0E0 libtest.so3. mkdir -p symbols/原创 2016-09-06 18:06:36 · 1826 阅读 · 0 评论 -
android jni 打印信息到logcat
1、在JNI的实现代码文件(.c或者.cpp)中加入包含LOG头文件的如下代码:#include 2、在需要打印的方法中添加打印代码, for(int i=0;i { __android_log_print(ANDROID_LOG_INFO, "acc", "argv[%d]= %s\n",i,argv[i]); }ANDROID_原创 2015-08-18 11:21:45 · 655 阅读 · 0 评论 -
c 获取当前时间并格式化输出
#define BUFLEN 255 #include #include int main() { time_t t = time( 0 ); char tmpBuf[BUFLEN]; strftime(tmpBuf, BUFLEN, "%Y-%m-%d %H:%M:%S", localtime(&t)); //format date and time. prin转载 2016-07-03 19:42:46 · 6915 阅读 · 0 评论 -
boost 处理压缩解压缩
boost::iostreams主要有两类东西组成,一个是device,另一个是filter,可以到源码目录下找,iostreams目录下有这两个目录可以找到相关类。device像是一种设备,不能单独使用,要配合普通流stream或stream_buffer来使用,可将流中的数据输入/输出到这个设备上,可分为Source,它以读取的方式访问字符序列,如:file_source 做文转载 2016-06-30 17:22:53 · 5301 阅读 · 0 评论 -
字符串转为数字(c c++ 两种方式)
int val = 0;std::string tmp = 10 or a;十进制:std::istringstream(tmp) >> val;//c++val = atoi(tmp.c_str());//c十六进制:sscanf(tmp.c_str(),"%x",&val);//c++val = strtol(tmp.c_str(),NULL,16)原创 2016-06-14 12:08:53 · 2838 阅读 · 0 评论 -
遍历删除容器类成员的方法
方法一 std::list List; std::list::iterator itList; for( itList = List.begin(); itList != List.end(); ) { if( WillDelete( *itList) ) { itLis原创 2015-04-30 12:11:32 · 648 阅读 · 0 评论 -
拷贝构造函数
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plain copy int a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。[c-sharp] view转载 2016-01-22 14:58:50 · 413 阅读 · 0 评论 -
运算符优先级
C语言运算符优先级优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右--()圆括号(表达式)/函数名(形参表)--.成员转载 2016-01-20 17:37:48 · 395 阅读 · 0 评论 -
函数名前后加const修饰符的区别
1) 函数名前加constconst int Func() {}含义:返回值不可修改2) 函数名后加constint Func const () {}含义:const修饰的是类函数隐藏的第一个参数 this指针,这表明this指针只读,也即类成员不可修改注意该用法只能是成员函数,要是类的静态函数或者是非成员函数就不可以在函数名后面加上const参考:http原创 2016-01-20 11:26:37 · 2848 阅读 · 0 评论 -
宏拼接
#define VERSION_MAJOR 1#define VERSION_MINOR 0#define PVERSION_THIRD 0#define PEER_VERSION_FOURTH 10000#define version_fun(a,b,c,d) #a"."#b"."#c"."#d#define VERSION_STRING_NUMBER_ON原创 2015-09-15 18:45:51 · 1311 阅读 · 0 评论 -
eclipse 快捷键
编辑快捷键 【ALT+/】 显示代码提示,以及代码自动补全功能。 【Ctrl+/】 添加注释 【Ctrl+D】 删除当前行 窗口快捷键 【Ctrl+M】 窗口最大化和还原 查看和定位快捷键 1. 【Ctrl+K】、【Ctrl+Shift+K】 快速向下和向上查找选定的内容,从此不再需要用鼠标单击查找对话框了。转载 2015-08-18 11:24:55 · 379 阅读 · 0 评论 -
linux 下 select ,poll ,epoll 对比
select,poll,epoll简介selectselect本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。这样所带来的缺点是:1 单个进程可监视的fd数量被限制2 需要维护一个用来存放大量fd的数据结构,这样会使得用户空间和内核空间在传递该结构时复制开销大3 对socket进行扫描时是线性扫描转载 2014-08-04 15:47:54 · 573 阅读 · 0 评论 -
QT的字符编码转换
开发的终端需要接入两个外设,二代证读取设备和打印机。让人郁闷的是,两个设备的字符编码与终端系统不一致,一开始耗了不少时间,后来才注意到字符编码的问题。二代证读出来的数据都是用unicode编码的,而打印子要求穿过去的数据要转换成unicode编码。查阅了help文档,发现QT有自己的转换函数,那真是再好不过了。首先是二代证的数据:QString text =转载 2014-07-07 16:56:30 · 2617 阅读 · 0 评论 -
C++ 回调函数与函数指针
补充: 楼主已经开始想要知道如何用函数指针了,不错,好学生,给你个例子#include int ff(int(*p)(int,int),int a,int b)//原始写法,阅读不便{return p(a,b);}typedef int(*Pfun)(int,int);//定义函数指针类型,同时申明了原型 返回int 两个int形参int f(Pfun p,in转载 2014-05-20 10:15:10 · 760 阅读 · 0 评论 -
关于函数名与函数指针
示例代码如下:#include int asdf(int a){ printf("%d\n",a); return 0;}int main(){ int (*p)(int); asdf(5); p=asdf; (*p)(5); p(5); printf("asdf is %d,p is %d,*p is %d\n",asdf,p原创 2012-07-15 13:22:18 · 5052 阅读 · 3 评论 -
Linux下的定时器用法
在linux下提供了两种基本的Timer机制:alarm和settimer。 1、alarm #include unsigned int alarm(unsigned int seconds); 这是个最简单的Timer,当调用了alarm(n)时,等待n秒后,就会触发一次SIGALRM信号,故需要在调用alarm函数前先设置好 SIGALRM信号对应的处理转载 2012-08-24 10:12:17 · 967 阅读 · 0 评论 -
Tcp与Udp(C语言版)
TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,在 OSI模型中,它完成第四层传输层所指定的功能。UDP:是User Datagram Protocol的简称,用户数据包协议,是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送转载 2012-08-20 13:51:22 · 1182 阅读 · 0 评论 -
编译过程
我们在程序编译时会经历 预编译---编译---汇编---链接 这四个阶段。在高级语言中这些步骤不易察觉,下面是几个阶段要处理的内容:预编译:此过程主要处理源代码中以#开头的预编译指令,如 #if ,#include,#define等 1.将所有的#define删除,并且展开所有的宏定义。 2.处理所有条件预编译指令,比如:#if ,#endif,#ifdef等原创 2012-08-12 15:54:59 · 536 阅读 · 0 评论 -
libxml 入门
http://jianlee.ylinux.org/Computer/C/libxml.htmlXML介绍:XML 和 DOMXML是eXtensible Markup Language的缩写,它是一种可扩展性标识语言, 能够让 你自己创造标识,标识你所表示的内容。DOM全称是Document Object Model(文档 对象模型),定义了一组与平台和语言无关的接口,以转载 2012-08-03 16:31:41 · 1888 阅读 · 0 评论 -
const char *p与char * const p区别
const char *p //p所指向的内存单元的内容是不可以修改的,但是p的指向可以修改,例如:const char *p="hello"; p="world"; char * const p//p所指向的内容可以修改,但是p的指向不可以修改,例如: char * const p="hello"; *p='c';原创 2012-07-09 17:50:22 · 822 阅读 · 0 评论 -
关于函数在.c文件定义在.h文件声明与makefile
正确写法:aaa.h:#ifndef AAA_H#define AAA_Hvoid pri();#endifaaa.c:#include "aaa.h"#include void pri(){ printf("aaaaa\n");}main.c:#include "aaa.h"int main(){ pri();原创 2012-06-06 15:21:26 · 2909 阅读 · 0 评论 -
关于for循环
测试代码与结果:root@ubuntu:~/testC/testfor# ./fori is 0,j is 0i is 1,j is 1i is 2,j is 2i is 3,j is 3i is 4,j is 4root@ubuntu:~/testC/testfor# cat for.c#includeint main(){ int i=9; in原创 2012-05-31 11:31:11 · 755 阅读 · 0 评论 -
预编译命令
指令 用途# 空指令,无任何效果#include 包含一个源代码文件#define 定义宏#undef 取消已定义的宏#if 如果给定条件为真,则编译下面代码#ifdef 如果宏已经定义,则编译下面代码#ifndef 如果宏没有定义,则编译下面代码#elif 如果前面原创 2012-04-10 15:32:53 · 453 阅读 · 0 评论 -
c语言中的“\n”与“\r”
\r是回车符,\n是换行符。 计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。 于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,原创 2012-03-20 09:37:34 · 1196 阅读 · 0 评论 -
static的作用
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容char a = 'A'; // global variable原创 2012-01-19 12:47:13 · 504 阅读 · 0 评论 -
8086与ARM在函数调用中的参数传递与返回值存储
arm属于RISC指令集,而x86则是CISC指令集的代表,编译器生成的结果比较有代表性。其中,参数传递和返回值是汇编/C混合编程比较关注的部分,尤其是在bootloader中编程中非常重要。总的来说,RISC倾向于寄存器穿参数,而x86则是通过堆栈传参数。而返回值则都通过效率最高的寄存器完成,arm中是r0,x86是eax。以下的示例是通过写一个简单例子,并且反编译objdump来看生成的汇转载 2012-09-28 20:52:33 · 2241 阅读 · 1 评论