随笔分类 - c++语言
1
摘要:可以通过time()函数来获得计算机系统当前的日历时间(Calendar Time),处理日期时间的函数都是以本函数的返回值为基础进行运算。其原型为:time_t time(time_t * t);如果你已经声明了参数t,你可以从参数t返回现在的日历时间,同时也可以通过返回值返回现在的日历时间,即从一个时间点(例如:1970年1月1日0时0分0秒)到现在此时的秒数。如果参数为空(NULL),函数将只通过返回值返回现在的日历时间,比如下面这个例子用来显示当前的日历时间:#include int main(void) { time_t t; t=time(NULL); pri...
阅读全文
摘要:我们在开瓶瓶罐罐的时候,经常会遭遇因各种瓶口规格不同而找不到合适的工具的尴尬。所以有时候就为了开个瓶,家里要备多种规格的开瓶器。同样是开个瓶子嘛,何必这么麻烦?于是有人发明了多功能开瓶器,不管啤酒瓶汽水瓶还是软木塞的红酒瓶都能轻松打开。然而开瓶器的问题也会发生到程序设计中。比如我们要编写一个函数来求一个数的绝对值,然而整数、浮点型数、双精度型数都有绝对值,但为它们编写的函数返回值类型却是各不相同的。比如:int iabs(int a);float fabs(float a);double dabs(double a);这样是不是有点备了多种开瓶器的感觉?我们能不能在程序设计中也做一个多功能的开
阅读全文
摘要:问题:环境:ubuntu 12.04,g++版本4.6.3,编译目标文件时出现warnings:u1204@u1204-zhw:~/hwsvn/2sw/4prj_mips/UCP_rt5350/src/trunk$ make clean;make
rm -f *.o local_ctrl
g++ -g3 -Wall -o0 -c msgrcv_cmd.cpp -o msgrcv_cmd.o
In file included from msgrcv_cmd.h:24:0, from msgrcv_cmd.cpp:30:
controller.h: In cons...
阅读全文
摘要:类UNIX下C/C++开发,代码调试比较麻烦,最原始的加跟踪调试很土,也很费时,特别是一个庞大的项目,代码行数非常大的时候调试起来非常费劲,当core dump时定位也不容易,这里介绍几个常用工具: gdb、dbx调试工具,valgrind内存检查工具(Linux) 。gdb(GNU DeBugger)是GNU的调试器,一般和gcc配搭使用。要使用GDB进行调试,编译程序时要指定-g或-ggdb的编译选项。如: gcc –g main.cgdb指令:f(file):指定可执行文件,l(list)列出源文件,r(run)运行可执行文件,可带执行参数,b(break)设置断点,c(continue
阅读全文
摘要:很久没看APUE,今天一位朋友问道关于一个mutex的问题,又翻到了以前讨论过的东西,为了不让自己忘记,把曾经的东西总结一下。先大体看下网上很多地方都有的关于pthread_cond_wait()的说明:条件变量 条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。 1. 创建和注销 条件变量和互斥锁一样,都有静态动态两种创建方式,静态方式使用PTHREAD_COND_INITIALIZER常
阅读全文
摘要:共用版.h文件//----------------------------------------------------------------------------// 程序名称:ConfigFile.h// 程序说明:类 ConfigFile 的定义// 程序作者:// 程序版本:1.0// 开始日期:1999-01-10//----------------------------------------------------------------------------#ifndef __CONFIGFILE_H__#define __CONFIGFILE_H__#include
阅读全文
摘要:老外写的一段代码,在Server中编写这个类读取配置文件比较实用C++代码//Config.h#pragmaonce#include#include#include#include#include/**\briefGenericconfigurationClass**/classConfig{//Dataprotected:std::stringm_Delimiter;//!m_Contents;//!::iteratormapi;typedefstd::map::const_iteratormapci;//Methodspublic:Config(std::stringfilename,st
阅读全文
摘要:什么是Core Dump?Core的意思是内存, Dump的意思是扔出来, 堆出来.开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成, 这个文件便是操作系统把程序down掉时的内存内容扔出来生成的, 它可以做为调试程序的参考.core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump.如何使用core文件?gdb -c core文件路径 [应用程序的路径]进去后输入wher
阅读全文
摘要:一、引入 定义一个类的对象,首先系统已经给这个对象分配了空间,然后会调用构造函数(说明:假设存在构造函数--2010.9.5修正)。一个类有多个对象,当程序中调用对象的某个函数时,有可能要访问到这个对象的成员变量。而对于同一个类的每一个对象,都是共享同一份类函数。对象有单独的变量,但是没有单独的函数,所以当调用函数时,系统必须让函数知道这是哪个对象的操作,从而确定成员变量是哪个对象的。这种用于对成员变量归属对像进行区分的东西,就叫做this指针。事实上它就是对象的地址,这一点从反汇编出来的代码可以看到。二、分析1、测试代码:?/////////////////////////////////.
阅读全文
摘要:一个对象的成员函数其实就是一般的全局函数,只是编译器给它隐含加了一个指向该对象的const指针,这就是this指针。下面让我们一起来了解一下this指针吧!this指针是一个隐含于每一个类的成员函数中的特殊指针(包括析构函数和构造函数),它用于指向正在被成员函数操作的对象。不过,在一般的程序设计中不直接用它的,this是一个指针变量,因此在成员函数中,可以使用*this来表示正在调用该函数的对象。1. this指针的用处:一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对
阅读全文
摘要:起初刚学C++时,很不习惯用new,后来看老外的程序,发现几乎都是使用new,想一想区别也不是太大,但是在大一点的项目设计中,有时候不使用new的确会带来很多问题。当然这都是跟new的用法有关的。new创建类对象,使用完后需使用delete删除,跟申请内存类似。所以,new有时候又不太适合,比如在频繁调用场合,使用局部new类对象就不是个好选择,使用全局类对象或一个经过初始化的全局类指针似乎更加高效。一、new创建类对象与不new区别下面是自己总结的一些关于new创建类对象特点:new创建类对象需要指针接收,一处初始化,多处使用new创建类对象使用完需delete销毁new创建对象直接使用堆空
阅读全文
摘要:问题:C语言中有struct自定义结构体类型;C++中也有struct类型,而且,与C++中面向对象主要的数据类型class还极为相似。那么,C++中struct和class之间有什么区别,什么情况下使用struct呢?解决办法:从C++语言设计者Bjarne Stroustrup的大作《C++编程语言(特别版)》中归纳C++中struct和class的区别,有以下几点:1. 成员的默认访问权限。struct的成员默认是public的;class的成员默认是private的;2. 默认继承权限。在没有明确指定的情况下,struct的默认继承方式是public,class的默认继承方式是priv
阅读全文
摘要:32位与64位的数据类型长度是不一样的,而且windows和linux也有些许区别,下面把64位下的数据长度列表如下(无符号unsigned和有符号的长度一样): linux64 windows64 linux32 windows32char 8 8 8 8short 16 16 16 16int 32 32 32 32long 6432 32 32long long 64 64 64 64size_t 64 64 32 32需要注意的是long类型在win64下是32位,千万别搞错了。size_t类型随着CPU位数变化,也要注意。总结:没事不要用long。size_t是系统类型,使用时心里.
阅读全文
摘要:C/C++中判断某一文件或目录是否存在1.C++很简单的一种办法:#include#includeusingnamespacestd;#defineFILENAME"stat.dat"intmain(){fstream_file;_file.open(FILENAME,ios::in);if(!_file){cout
#include
#include voidmain(void)
{
/*Checkforexistence*/
if((_access("ACCESS.C",0))!=-1)
{
printf("FileACCESS.Cexis
阅读全文
摘要:问题:将一个c文件改为cpp文件,其中的perror()改用C++中的std::cerr ,而strerror()只需要用到头文件,所以,重新编译时,将替换为。2. errno无疑是一个系统定义的全局变量,不是由用户来声明或定义的。查到中有这样的宏定义#ifndef errno
extern int errno;
#endif将头文件包含到程序中,重新编译,编译顺利完成。问题解决。
阅读全文
摘要:问题:ubuntu下编写测试下标运算符[]重载的程序。使用while (cin >> buf)将接收到的字符串存储到string buf中,不知道该怎样结束cin的输入操作;解决办法:1. 放狗搜,结论是linux下使用Ctrl+d,windows下使用Ctrl+z来结束键盘输入。源程序如下:#include #include using namespace std; class Assoc { struct Pair { string name; double val; Pair (string n = "", double v...
阅读全文
摘要:1.gcc版本过高,解决方法sudo apt-get install gcc-4.4sudo apt-get install g++-4.4装完后在/usr/bin目录下sudo mv gcc gcc.baksudo ln -s gcc-4.4 gccmv g++-4.4 g++g++ -v2.selected multilib '32' not installed解决方法sudo apt-get install g++-4.4-multilib3.host SharedLib: lib64EGL_translator (out/host/linux-x86/obj/lib/l
阅读全文
摘要:问题:程序模型用C++语言编写,在程序模型和调用函数之间添加了一个接口文件modelc.cpp,用来让用c语言程序调用程序模型中的函数;新添加了两个函数setPduPowerConsumptionCnt()和setPduPowerConsumptionTot(),用来清除PDU模型中的总功耗和功耗计数器;编译时出现错误提示:dingq@wd-u1110:~/hwsvn/2sw/1prj_linux/pdu/src/branches/pdu-isocket$ make clean;make
rm -f *.o pdu
arm-linux-g++ -g3 -Wall -o0 -I../../../
阅读全文
摘要:一 :和是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。因此,当使用时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。二:所谓namespace,是指标识符的各种可见范围。C++标准程序库中
阅读全文
摘要:关于C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,参考了康建东兄的const使用详解一文,对其中进行了一些补充,写下了本文。1. const常量如:constintmax=100;优点:const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误(边际效应)2. const 修饰类的数据成员。如:classA { constintsize; … }const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其
阅读全文
1