C/C++
文章平均质量分 81
时行居正
拙则勤,行则易
展开
-
localtime时间函数
背景: 需要将起始时间存储下来(要求格式为年-月-日-时:分:秒),以便下次进入循环时能与当前时间做比较。解决方案: 显然就是调用linux的localtime时间函数(参考文献1)的,于是乎写出了如下的代码#include #include #include #include #include struct tm* old_time;原创 2014-12-28 22:55:10 · 2838 阅读 · 0 评论 -
void point
转自:http://www.learncpp.com/cpp-tutorial/613-void-pointers/简单说就是,void* 可以指向任何地址,但是在使用时不允许直接引用,而应该转成相应的类型才可以。即void * p = &addr; 正确,但是 cout另外,原文也总结了null point 与 void point的区别,简单说就是null point不指向任何地址,转载 2016-07-29 13:22:53 · 613 阅读 · 0 评论 -
输入函数对比
0 scanf(0) 函数原型:int scanf(const char * restrict format,...);(1) 返回值:返回成功读入的数据项数,注意是数据项数;例如scanf(“%d %d”, &a, &b),如果a、b都被读入则返回2,如果只有a被读入则返回1。(2) 标准的库函数,包含在#include 中。(3) 读字符原创 2017-01-05 18:23:25 · 349 阅读 · 0 评论 -
[转] C++前向声明
转自http://blog.csdn.net/damotiansheng/article/details/50916394整理于:http://blog.csdn.net/heyutao007/article/details/6649741http://blog.sina.com.cn/s/blog_68d90fdb0100yapr.html1. 前向声明好处1)不必要的#in转载 2017-03-24 16:22:47 · 319 阅读 · 0 评论 -
C++小经验汇总
本篇博客旨在汇总一系列在C++开发过程中遇到的小问题和经验总结。1 c++ 16进制显示字符变量c++16进制显示,资料一直只是说明需要在输出变量之前指定进制,如std::cout原创 2017-04-27 22:45:21 · 334 阅读 · 0 评论 -
【转】调试段错误方法
0 引言 在调试应用程序时,可能因各种原因导致运行发生段错误。因此,有必要将堆栈调用信息打印出来,方便定位错误。1 方法 在glibc头文件execinfo.h中提供了三个函数获取当前线程的函数调用堆栈。0) int backtrace(void **buffer, intsize)该函数将获取的堆栈信息保存至buffer中,参数size则是表示buffer转载 2017-06-05 10:15:44 · 693 阅读 · 0 评论 -
[转] GLOG 使用
0 下载及编译从网络上搜索即可得到下载链接。然后编译(本人编译的是静态链接库libglog_static),编译过程中可能会报出如下错误。(0)”min ” 不是std成员;#include ;(1)函数snprintf已经被定义可注释,或者将所有snprintf替换为其它名称如“glog_snprintf”(原因在于VS2015中已经集成C11,而C11中已经将该函数列入了标转载 2017-06-07 09:28:56 · 2093 阅读 · 1 评论 -
Restrict关键字
0 定义C99中新增加的用于修饰指针的关键字,用于表示该指针所指向的内存,只有通过该指针访问得到(如下ptr指向的内存单元只能通过ptr访问得到)。从而可以让编译器对代码进行优化,生成更有效率的汇编代码。char *restrictptr;1 优化举例 举例1,如下代码(引自参考1),以及翻译成汇编之后的代码。#include #ifdefRESvo原创 2017-07-12 16:54:15 · 2332 阅读 · 0 评论 -
[转] 尾调用优化
http://www.ruanyifeng.com/blog/2015/04/tail-call.html一、什么是尾调用?尾调用的概念非常简单,一句话就能说清楚,就是指某个函数的最后一步是调用另一个函数。 function f(x) { returng(x); } 上面代码中,函数f的最后一步是调用函数g,这就叫尾调用。以下两种情况,都不属于尾调用。// 情况一 funct...转载 2018-03-21 18:58:37 · 356 阅读 · 0 评论 -
溢出警告
最近开发一个GPS同步FPGA时间的功能,需求是将GPS时间写入到FPGA配置好的32位寄存器中。给的需求是时间精度微秒,范围是0~1小时(但GPS输出时间精度也只有1ms……)。在写入寄存器过程中为了测试60*60*1000*1000微秒是否溢出。写了如下demo。int main(int argc,char* argv[]){ unsigned int value;原创 2016-07-29 13:21:46 · 485 阅读 · 0 评论 -
【转】轻松记住大端小端的含义(附对大端和小端的解释)
转自:http://www.cnblogs.com/wuyuegb2312/archive/2013/06/08/3126510.html 或许你曾经仔细了解过什么是大端小端,也动手编写了测试手头上的机器上是大端还是小端的程序,甚至还编写了大端小端转换程序;但过了一段时间之后,当你再看到大端和小端这两个字眼,你的脑中很快浮起了自己曾经做过的工作,却总是想不起究竟哪种是大端、哪种转载 2015-11-18 20:50:53 · 2171 阅读 · 0 评论 -
const 关键字
1 理解“const应该理解为只读变量,而不是常量”这是之前死记下来的,当时并没有完全理解什么意思。最近在搜寻“const变量能否作为数组长度大小”问题时,发现原来要彻底理解const变量还是需要从编译链接的角度分析,即存储的位置是不同的。对于常量(如在程序中定义了数字123或者字符串“Hello World”)它有特定的段存储常量,即它的地址是固定的。而只读变量是在栈里的,只是其内容不能在代原创 2016-02-21 14:08:46 · 297 阅读 · 0 评论 -
纯虚函数
1 简要介绍 以”What”,”When”,”Why”和”How”分别介绍纯虚函数。为什么需要纯虚函数? 当基类的接口难以描述和实现时,需要使用虚函数。例如基类形状,派生类正方形和圆。那么派生类由于是具体的形状,因此可以定义接口Draw( ),而且非常好实现,内容就是分别描述方形和圆形的画法。但是对于基类形状而言,由于不是具体的所以根本没法实现Draw(原创 2015-11-13 21:42:43 · 640 阅读 · 0 评论 -
类型转换
1 对比C风格的转换和C++风格的类型转换 C:int d =0x123456; int* p =(int *)d; C++:int d =0x123456; int* p =reinterpret_cast(d);//xxx_cast(value);两个括号都不能省略 虽然能达到同样的效果,但显然C风格的可读性差原创 2015-11-16 19:30:36 · 558 阅读 · 0 评论 -
高精度低精度以及不同类型之间的转换
经验规则1、 在32位机上,int型和unsignedint型都是32位的(4个字节)。2、 enum会跟据最大值来决定类型,一般来说为int型,如果超出int型所能表示的范围,则用比int型大的最小类型来表示(unsigned int, long 或者unsigned long)3、 关于类型的大小。一般用所能表示的数据范围来比较类型的大小,如char型4、 所有比int转载 2015-11-17 19:07:19 · 7279 阅读 · 1 评论 -
虚基类作用
[转自http://blog.csdn.net/caomiao2006/article/details/4463664]虚基类的作用 当一个基类被声明为虚基类后,即使它成为了多继承链路上的公共基类,最后的派生类中也只有它的一个备份。例如:class CBase { };class CDerive1:virtual public CBase{ };class CD转载 2015-12-10 20:42:40 · 2538 阅读 · 0 评论 -
fread
[转自 http://blog.csdn.net/foxliucong/article/details/4736956和http://blog.csdn.net/abclixu123/article/details/8284680 ]1 fread(从文件流读取数据) 表头文件 #include 定义函数 size_t fread(void * ptr,si转载 2015-12-10 20:33:58 · 775 阅读 · 0 评论 -
类模板的特化
类模板的特化1 类模板的特化 指定具体的匹配类型,简单如下所示 (1)普通的类模板定义如下templateclass Test{public: ....private: ....} (2)特化的类模板template中间是空的class Test //跟在类名后的<>里指定具体的类型{public: ....原创 2015-12-10 23:02:29 · 740 阅读 · 0 评论 -
运算符重载
1两个问题 在重载运算符时,通用的而且需要重点考虑的包括两个问题: 问题一:以友元还是成员函数重载? 问题二:返回值到底是引用还是对象? 关于问题一,双目运算符建议以友元函数方式重载,而单目运算符是以成员函数方式重载。例如,[]、!、=、+=等单目运算符以成员函数方式重载。而+、-、*、/等双目运算符以友元函数方式重载。因为对于双目运原创 2015-12-02 22:53:34 · 479 阅读 · 0 评论 -
派生类与基类的转换关系
1 派生类与基类能否转换与基类是否有虚函数无关,与继承方式有关2 当以public方式继承时: 派生类对象可以转换为基类对象(static_cast),访问的是基类成员函数;同时派生类指针可以转换为基类指针(reinterpret_cast),访问的是基类成员函数 基类对象无法转换为派生类对象;但是基类指针可以转换为派生类指针(reinterpret_c原创 2015-11-19 23:43:08 · 821 阅读 · 0 评论 -
C++设计模式——单例模式
http://www.jellythink.com/archives/82问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中,会专门有一个日志模块,负责写日志,由于在系统的任何地方,我们都有可能要调用日志模块中的函数,进行写日志。那么,如何构造一个日志模块的实例呢?难道,每次new一个日志模块实例,写完日志,再delete,不转载 2016-02-21 22:03:49 · 329 阅读 · 0 评论 -
[转] Linux system函数返回值
https://blog.csdn.net/cheyo/article/details/6595955例: status = system("./test.sh"); 1、先统一两个说法:(1)system返回值:指调用system函数后的返回值,比如上例中status为system返回值(2)shell返回值:指system所调用的shell命令的返回值,比如上例中,test.sh中返回的值为...转载 2018-05-10 21:07:28 · 355 阅读 · 0 评论