![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++语言编程
文章平均质量分 50
xtx1990
新一代年轻人
展开
-
c++中ifstream一次读取整个文件
c++中一次读取整个文件的内容的方法:1. 读取至char*的情况[cpp] view plaincopystd::ifstream t; int length; t.open("file.txt"); // open input file t.seekg(0, std::ios::end); //转载 2014-07-31 15:43:25 · 1687 阅读 · 0 评论 -
linux生成uuid全球唯一标识码方法
环境:ubuntu10.04 http://blog.csdn.net/liuchangyu23/article/details/4486794安装libuuid动态库sudo apt-get install libuuid1 uuid-dev 查看帮助文档man uuid_generate原创 2012-11-12 13:28:25 · 4598 阅读 · 0 评论 -
C语言中的面向对像
//使用C语言实现C++面向对象的功能[cpp] view plaincopyprint?/** * 用 c 语言实现类的继承,并且可用父类指针操作子类对像的一个测试例子 * * @Author: tomken.zhang * */ #include #include #includ转载 2012-11-12 11:46:54 · 591 阅读 · 0 评论 -
glib库中定义的高质量宏
下面这个宏是求结构体中某成员的偏移量#if defined(__GNUC__) && __GNUC__ >= 4#define G_STRUCT_OFFSET(struct_type, member) \ ((glong) offsetof (struct_type, member)) //使用库函数#else#define G_STRUCT_OFFSET(原创 2012-09-14 11:16:18 · 1379 阅读 · 0 评论 -
利用空间换时间来快速查找字符是否存在某个字符串里
如题,空间换时间查找字符是否存在某字符串里的例子,下面的代码里字符串长度比较短,不能体现优化的时间,如果比较长的字符串,它的优势就很明显了。总之,抛砖引玉吧。#include #include const char str[] = "abcdef";int main(){ int str_table[256]={0}, len, i; char ch原创 2012-11-07 14:15:54 · 554 阅读 · 0 评论 -
程序运行内存检测工具
静态工具:pclint(只针对linux下的C语言)动态运行:Valgrind工具原创 2012-10-30 10:48:20 · 820 阅读 · 0 评论 -
gcc中调试代码常用的宏
红色是比较常用的宏意义__FILE__ 本文件名__LINE__本行位于该文件的第几行__FUNCTION__函数名__PRETTY_FUNCTION__c语言中和同上,C++中稍有区别__VA_ARGS__格式化输出__VA_ARGS__的原创 2012-08-08 17:08:04 · 1235 阅读 · 2 评论 -
应用程序中GCC原子操作类模板
gcc从4.1.2版本开始提供了__sync_*系列的内置API,用于加减和逻辑运算,可以对1,2,4,8字节长度的数值或指针类型进行原子操作。为方便使用,个人对这些API作了简单的封装,主类模板如下: 1templatetypename T> 2class atomic_base 3{ 4public: 5 typedef T int_type; 6转载 2012-09-14 10:18:57 · 703 阅读 · 0 评论 -
ubuntu10.04下编译glib库
系统环境:Ubuntu10.04Glib版本:2.32.3 Glib介绍:libc指C函数库,这是一个通称,而glibc是GNU实现的libc,至于glib是一组较高层的函数库,比如链表、Hash等,在linux中glib是建立在glibc之上的,qt的库就叫做qt,也是建立在glibc和其他一些基本库之上。 GLib是Gtk +库和Gnome的基础。GLib可以在多个原创 2012-09-13 10:25:01 · 981 阅读 · 0 评论 -
glib g_main_loop理解
main loop使用模式大致如下:loop = g_main_loop_new (NULL, TRUE);g_main_loop_run (loop); g_main_loop_new创建一个main loop对象,一个main loop对象只能被一个线程使用,但一个线程可以有多个main loop对象。在GTK+应用中,一个线转载 2012-09-11 17:08:51 · 1251 阅读 · 0 评论 -
如何统计程序占用cpu时间?
linux里的glibc库提供了利器来获取进程和线程占用cpu的使用时间。 注意1.精确级别,纳秒级别原型long sys_clock_gettime (clockid_t which_clock, struct timespec *tp);which_clock参数解释CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从U原创 2012-09-27 17:49:25 · 2586 阅读 · 0 评论 -
linux下搭建c/c++集成开发环境netbeans
在linux环境下搭建c/c++集成开发调试环境netbeans系统环境Linux: centos 5IDE: Netbeans 6.5 + C/C++ Pack+Subversion客户端插件安装方法进入下载地址http://netbeans.org/downloads/index.htmll 下载C/C++ Development Pack l 下载j原创 2012-11-12 14:11:11 · 1799 阅读 · 0 评论 -
getopt函数和getopt_long函数 解析命令行
预备知识:1.getopt()getopt在UNIX下的命令列程式特别好用,特别是在你有许多参数要加入时。表头文件:#i nclude 函数声明:int getopt(int argc, char * const argv[], const char *optstring);函数说明:getopt()用来分析命令行参数。参数argc和argv是由main()传递的参数个数和转载 2012-11-14 15:13:51 · 573 阅读 · 0 评论 -
scons简易手册
在编译大程序时免不了要写个makefile来管理,但是makefile的规则对于大多数人来说都还太复杂了。于是我找到了autotools工具,尽管方便了一些,但是还是不够傻瓜。目前scons是我用过最傻瓜的。基本教程这里就不在累赘了,网上多的事,这里只是写常用变量和函数的汇总。详细英文文档地址:http://www.scons.org/doc/production/HTML/scons-m原创 2012-11-23 18:03:11 · 8374 阅读 · 0 评论 -
C++开发必看 四种强制类型转换的总结
C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: TYPE b = (TYPE)a C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。 const_cast,字面上理解就是去const属性。 static_cast,命名上理解是静态类型转换。如int转换成char。 d转载 2014-06-01 09:57:29 · 656 阅读 · 0 评论 -
自我学会利用Linux系统上已有的开发库
http://zhoulifa.bokee.com/6094520.html1、查看库文件是由哪个软件包提供的空闲时打开/usr/lib目录(因为我知道这个目录下放着一些库文件,是我们开发者可以利用的)想看看我的系统中有哪些库。看到一个libz.so,于是用命令查看:dpkg -S /usr/lib/libz.so此命令输出如下信息:转载 2013-06-24 10:25:08 · 799 阅读 · 0 评论 -
段错误bug的调试
我们在用C/C++语言写程序的时侯,内存管理的绝大部分工作都是需要我们来做的。实际上,内存管理是一个比较繁琐的工作,无论你多高明,经验多丰富,难 免会在此处犯些小错误,而通常这些错误又是那么的浅显而易于消除。但是手工“除虫”(debug),往往是效率低下且让人厌烦的,本文将就"段错误"这个 内存访问越界的错误谈谈如何快速定位这些"段错误"的语句。下面将就以下的一个存在段错误的程序介绍几种调试方原创 2013-06-14 14:24:37 · 643 阅读 · 0 评论 -
IT编程好书推荐
列一下我所认为的,你面试微软前必须要读的十本书:Code: The Hidden Language of Computer Hardware and Software (《编码的奥秘》)Computer System: A Programmer’s Perspective (《深入理解计算机系统》) / Windows via C/C++ (《Windows核心编程》 / 《程序员的自我修转载 2013-05-16 13:36:45 · 766 阅读 · 0 评论 -
关于linux下的随机数产生器的简单原理
要从随机数说起 调用随机数函数 rand() 的时候, 实际得到的这个随机数并不是绝对随机的,它是以一个初始值,通过一个算法,计算出来的“伪随机数"数列,每次调用rand()时,从这个数列依次取出一个值,做为随机数。这个初始的值就是"随机数种子", 也就是说,如果随机数种子相同,计算出的随机数数列是相同的。而srandom( x) 这个函数就是初始化随机数产生器,设定随机数种子用的。给定的x的就转载 2013-04-11 11:16:46 · 1062 阅读 · 0 评论 -
c语言中运算符运行速度比较
运行坏境:虚拟机下ubuntu10.04, i3处理器今天发现在pjsip开源代码在实现哈希表值的时候竟然不是使用常见的“%”运算,而是“&”这让我很好奇,猜想&运算比%运算要快,于是写了下面代码来验证自己的猜想,事实确实是这样的。下面是比较运算符 (乘*、除/ 、求余数%、与&、或| )的运算时间比较#include #include #include #define TOT原创 2013-01-08 17:04:38 · 5809 阅读 · 0 评论 -
预编译#pragma的常见使用
在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。 一般格式其格式一般为: #pragma Para。其中Para 为参数原创 2012-12-12 11:23:27 · 441 阅读 · 0 评论 -
程序后台运行已经输出重定向
nohup如果你正在运行一个进程,而且你想要在退出帐户时该进程继续执行,那么可以使用nohup命令。它是不挂起的意思。命令形式为:nohup command &尤其是当执行一个拥有多条命令的脚本时,看一个例子:假如有一个脚本(append.sh)拥有多条shell命令:nohup ./append.sh > out.append 2>&1 &那么这个脚本原创 2012-11-12 13:40:27 · 1381 阅读 · 0 评论 -
ldd命令详解
作用:用来查看程序运行所需的共享库,常用来解决程序因缺少某个库文件而不能运行的一些问题。1、首先ldd不是一个可执行程序,而只是一个shell脚本2、ldd能够显示可执行模块的dependency,其原理是通过设置一系列的环境变量,如下:LD_TRACE_LOADED_OBJECTS、LD_WARN、LD_BIND_NOW、LD_LIBRARY_VERSION、LD_VERBOSE转载 2012-12-05 10:04:33 · 1457 阅读 · 0 评论 -
source insight工程添加文件时去掉不必要的文件
1、打开某个工程后,菜单Project ->Add and Remove Project Files2. 菜单Options->Document Options 出现对话框后左上角是Document Type下拉条,并可以再右边的框里加入自己想要的文件匹配格式3、此时出现让你选择添加工程文件的对话框,右侧一排按钮中间只有一个可以打勾的位置(Show only known documents原创 2012-11-30 16:57:10 · 7859 阅读 · 0 评论 -
linux一些系统调用的再实现
由于linux的系统函数存在某些缺陷,因此在使用时,总是要重复的附带些其他的代码,所以有必要更完善的实现。//摘自glib库voidg_usleep (gulong microseconds){ struct timespec request, remaining; request.tv_sec = microseconds / G_USEC_PER_SEC; reques原创 2012-09-27 16:58:56 · 378 阅读 · 0 评论 -
C/C++面试题1
#define G_MININT8 ((gint8) 0x80)//值得注意,最小的8位数#define G_MAXINT8 ((gint8) 0x7f)#define G_MAXUINT8 ((guint8) 0xff)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)?#define SECONDS_PER_YEAR原创 2012-05-06 17:39:32 · 389 阅读 · 0 评论 -
《程序设计实践》笔记
1. 根据定义,全局变量可以出现在整个程序中的任何地方,因此它们的名字应该足够长,具有足够的说明性。对于局部变量使用段名字就够了。2. 现实中存在许多命名约定或者本地习惯。常见的比如:指针采用以 p结尾的变量名,例如nodep;全局变量用大写开头的变量名,例如 Global;常量用完全由大写字母拼写的变量名,如CONSTANTS等。这些不过是个人的喜好问题,与始终如一地坚持原创 2012-05-28 15:14:25 · 435 阅读 · 0 评论 -
谭浩强-《C++面向对象》读书笔记3
第 8 章 类和对象 对象的两要素:属性(静态特征),行为(动态特征)。发送消息,使得属性实现某一行为。C++中的对象有数据和函数组成。特点:封装和信息隐藏。类是对象的抽象,类是模板,不占内存,对象是类的实例,是类的具体表现形式,对象占内存。C++提供了继承机制,重用是使用继承的策略。多态性:由继承而产生的相关的不同类,其对象对同一消息会做出不同的响应。C++是“带类的C”,类是所原创 2012-05-06 19:15:42 · 1514 阅读 · 0 评论 -
谭浩强-《C++面向对象》读书笔记2
函数模块 函数模块,就是建立一个通用函数,要求调用函数参数个数要相同而类型可以不同,用一个虚拟的类型代替具体的数据类型。如:template //模块声明,T为虚拟类型,注意没有分号T max (T a, T b, T c) //没有分号{if (b > a) a =b ;If ( c > a) a = c ;return a ;}其中t原创 2012-05-06 19:10:53 · 1384 阅读 · 0 评论 -
谭浩强-《C++面向对象》读书笔记5
常对象 常对象必须有初值。常对象中的非const型的成员函数(除了由系统自动调用的隐式的构造函数和析构函数)不能被调用。在常对象中的数据成员定义前加上mutable 就可以被修改了,如mutable int count; 常对象成员只能通过构造函数的参数初始化表对常数数据成员的初始化。在类外定义构造函数,应写出:Time:::Time(int h):hour(h)原创 2012-05-06 19:28:21 · 1221 阅读 · 1 评论 -
谭浩强-《C++面向对象》读书笔记4
第9 章 关于类和对象的进一步讨论对象的初始化不能在声明类的时候,如果一个类的所有成员都是公用的,就可以在定义对象的时候初始化。C++使用构造函数来初始化对象。构造函数可以定义在声明的类体中,也可以在类体中声明,在类外定义,由建立对象时自执行的。如果不定义构造函数,在建立对象时也会自动调用一个构造函数,但是不起任何的作用。构造函数没有返回值,所以不需要声明类型。不能被用户调用。构造函数原创 2012-05-06 19:21:43 · 1156 阅读 · 0 评论 -
谭浩强-《C++面向对象》读书笔记6
友元 C++以关键字friend声明。友元可以访问与其有友好关系的类中的私有成员。1. 在一个类中声明友元函数 friend void get ();2. 在另一个类中声明友元函数 class Date; //对Date类的提前引用声明,因为下面Time类要引用clsaa Time{….Void display (Date &);//di原创 2012-05-06 19:32:32 · 1241 阅读 · 0 评论 -
谭浩强-《C++面向对象》读书笔记1
私有数据只能被本类中的成员函数调用,不能被除友元类之外的其他类调用。 在声明一个引用类型变量时,必须同时使之初始化。引用类型变量始终与其代表的变量相联系,不能再作为其他变量的引用(别名)。在对表达式、常量、不同类型引用时,必须用const 作声明。int i = 5;const &a = i+3;double d = 3.14;const &b = d;原创 2012-05-06 17:55:00 · 1240 阅读 · 0 评论 -
gcc: multiple definition of
/home/tace/openav/source/SeamlessMessage/CPaoFlt.o: In function `CPaoFlt::get_m_strPrmair() const':CPaoFlt.cpp:(.text+0x0): multiple definition of `CPaoFlt::get_m_strPrmair() const'/home/tace/open转载 2011-12-20 13:43:41 · 4881 阅读 · 2 评论 -
学习C++进阶必读书目
(红色为必读书目)1. C++语言的设计和演化首先肯定要读一读Bjarne Stroustrup的The Design and Evolution of C++,了解一下这个语言的历史。接下来就可以看别的书了,但要不停地回头看这本书,看到你不断地学到的新技术是怎么样一点点地被接纳到这个语言中去的。2. Essential C++中文版和C++Primer(同转载 2012-05-17 00:22:33 · 650 阅读 · 0 评论 -
c语言中定义struct型变量时使用“.”符号的意义
#include #include struct cmd{int a;char b;int c;};struct cmd test_cmd = {.c = 9, //如果不加上".", 编译时通不过的,加上以后就可以不按顺序给变量赋值.a = 10,.b = 'b'};int main(){printf(原创 2012-08-02 14:28:17 · 1272 阅读 · 0 评论 -
linux下shell脚本自动生成编译信息
摘自asterisk源码里面,哈哈,开源项目就是好!!!//把下面cat内容导出到build.h文件就是编译信息。#!/bin/shHOSTNAME=`uname -n`KERNEL=`uname -r`MACHINE=`uname -m`OS=`uname -s`USER=`id | awk -F")" '{print $1}'| awk -F"(" '{print $2}'原创 2012-08-02 18:16:58 · 1135 阅读 · 0 评论 -
C语言:运行中获取宏名字的技巧
在调试C语言程序时,有时需要打印宏的名字。可以通过定义宏,宏名字的数组来获得。例如:[cpp] view plaincopy#include #define MACRO_STR(x) {x, #x} //#x即可取到x的整个字符串//#define MACRO_FUNC(type) {type##转载 2012-08-23 16:00:01 · 2716 阅读 · 0 评论 -
libcprops库(哈希表、红黑树、优先级链表、字典树等等)
该库实现了下列内容,在需要时可以直接下载源码编译使用。avl树、http client(简单的)和http server、数据库(db、mysql、postgres)、大根堆、双向链表和优先级链表、内存池、键值表(mtab)、哈希表和排序的哈希表、伸展树、字典树、vector容器。原创 2012-09-05 17:33:36 · 2948 阅读 · 0 评论 -
数据结构:最小堆/哈希表/二叉树/平衡二叉树/红黑树的意义(什么情况下使用)
接触堆数据结构是在排序里面讲的,空间复杂度O(1),时间复杂度O(NlogN),但是在实践中还是不如快速排序(好像快速排序可以更好的利用硬件特性)。堆 的意义就在于:最快的找到最大/最小值,在堆结构中插入一个值重新构造堆结构,取走最大/最下值后重新构造堆结构其时间复杂度为O(logN),而其他方法最少为O(N).堆实践中用途不在于排序,其主要用在调度算法中,比如优先级调度,每次取优先级最高的,时间转载 2012-09-03 16:45:29 · 3087 阅读 · 0 评论