
C/C++
文章平均质量分 72
矢口
这个作者很懒,什么都没留下…
展开
-
stdio 的 buffer 问题
转自stdio 的 buffer 问题下面会涉及到一些底层的函数库以及系统调用,不想看过程的直接跳到最后看结论好了。一段代码,通过 tail -f 看打的 log,发现很长时间都没有输出,然后突然一下子输出了好多条,猜想可能跟 buffer 之类的有关系。这个问题其实很早就遇到过,最初以为是什么 bug,直到看到自己写的代码也出现类似的现象之后才决定看看是怎么回事。先来转载 2015-11-12 00:40:01 · 1070 阅读 · 1 评论 -
Ubuntu下Qt编译报错“cannot find -lGL”的解决方案
转自Solved the problem by installing the “libglu1-mesa-dev” package.sudo apt-get install libglu1-mesa-dev -y转载 2014-09-28 22:04:49 · 2663 阅读 · 0 评论 -
static和const
转自static关键字至少有下列n个作用: (1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值; (2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问; (3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用转载 2014-10-22 19:10:03 · 547 阅读 · 0 评论 -
const变量的存储区及修改权限
转自const变量的存储区及修改权限在帖子的最后,有这么一个很有趣的实验:[cpp] view plaincopy const int a = 1; int *p = const_castint*>(&a); *p = 2; cout cout cout转载 2014-10-21 22:18:58 · 748 阅读 · 0 评论 -
linux下fflush(stdin)的使用问题
转自首先,fflush在C/C++/POSIX标准中只定义了处理输出流的行为,对于像stdin这种输入流,这是未定义行为undefined behavior,随便C/C++库怎么去实现都不算错。即使某个C/C++库对fflush(stdin)的处理是删除掉你硬盘上所有文件都没有错。所以你根本不要指望任何未定义行为能在不同平台下有相同的表现。再来看看linux对fflus转载 2014-10-05 22:14:28 · 6259 阅读 · 0 评论 -
如何使用前置声明取代包括头文件
转自这篇文章很大程度是受到Exceptional C++ (Hurb99)书中第四章 Compiler Firewalls and the Pimpl Idiom (编译器防火墙和Pimpl惯用法) 的启发,这一章讲述了减少编译时依赖的意义和一些惯用法,其实最为常用又无任何副作用的是使用前置声明来取代包括头文件。Item 26 的Guideline - "Never #转载 2014-09-27 14:59:18 · 861 阅读 · 0 评论 -
一个C语言宏展开问题
转自一个令人比较迷惑的问题,学C语言好多年,今天终于搞明白,记之。-------------------------------------------------------------#define cat(x,y) x ## y#define xcat(x,y) cat(x,y)cat(cat(1,2),3) //为什么不是 123?xcat(xca转载 2014-09-27 16:29:43 · 2270 阅读 · 0 评论 -
C语言预处理运算符
转自预处理还需要运算符?有没有搞错?^_^, 没有搞错,预处理是有运算符,而且还不止一个:#(单井号) —— 字符串化运算符。##(双井号 )—— 连接运算符#@ —— 字符化运算符。接下来我们会分别说明一下他们的用法.1.字符串化运算符 —— #用于创建字符串,#运算符后面应该跟一个形参(中间可以有空格转载 2014-09-27 16:05:40 · 624 阅读 · 0 评论 -
对类前置声明和包含头文件的一点理解
转自类的前置声明(forward declaration)和包含头文件(#include)的区别常常会迷惑我们,特别是涉及两个类相互包含的时候。因此我们有必要搞清楚二者的区别以及二者的适用场合。 首先我们需要问一个问题是:为什么两个类不能互相包含头文件?所谓互相包含头文件,我举一个例子:我实现了两个类:图层类CLayer和符号类CSymbol,它们的大致关系是图层里包含有符转载 2014-09-26 22:22:33 · 1116 阅读 · 0 评论 -
malloc/free和new/delete的区别
转自malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和转载 2014-09-26 14:02:47 · 631 阅读 · 0 评论 -
gcc和g++的区别
转自What is the difference between g++ and gcc?原创 2014-09-26 20:42:15 · 733 阅读 · 0 评论 -
中断服务程序(Interrupt Service Routines,ISR)注意事项
转自中断是嵌入式系统中重要组成部分,很多编译器开发商都让标准c支持中断,并引入关键字_interrupt.但是:1、ISR不能有返回值;2、ISR不能传递参数;3、ISR应该是短而高效的,在ISR中做浮点运算是不明智的;4、ISR中不应该有重入和性能上的问题,因此不应该使用pintf()函数。 转自优快云 1.ISR 不能有返回值。为什么?转载 2014-08-18 14:58:27 · 16080 阅读 · 0 评论 -
对C语言中sizeof细节的三点分析
转自1.sizeof是运算符,跟加减乘除的性质其实是一样的,在编译的时候进行执行,而不是在运行时才执行。那么如果编程中验证这一点呢?ps:这是前两天朋友淘宝面试的一道题,北庚理解:输入结果为 1 1sizeof中的++i 的副作用并没有显示出来,原因只可能有一个,在编译的时候sizeof执行以后将++转载 2014-09-23 22:35:41 · 562 阅读 · 0 评论 -
关于size_t与size_type
转自问题起源于这样一段代码:01 #include 02 #include 03 04 int main()05 {06 size_t indexs = -1;07 size_t ps = 100;08 int index = -1;09 int p = 100;10 printf("%d\n"转载 2014-09-23 21:07:06 · 3275 阅读 · 0 评论 -
vc6静态库的生成和调用
转自1、静态库的生成: 在vc6.0++中Ctrl+N选择Projects下的Win32 Static Library,Project name:SumLib,点击OK,下一页中的两项可选可不选,点击Finish完成。 在此工程中新建lib.h和lib.cpp两个文件,源码如下: //lib.h #ifndef LIB_H转载 2014-08-18 00:29:26 · 719 阅读 · 0 评论 -
.h头文件、 .lib库文件、 .dll动态链接库文件之间的关系
转自.h头文件、 .lib库文件、 .dll动态链接库文件之间的关系h头文件作用:声明函数接口dll动态链接库作用:含有函数的可执行代码lib库有两种:(1)静态链接库(Static Libary,以下简称“静态库”)(2)动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)两者的区别:实质是不一样的东西。静转载 2014-08-18 00:05:09 · 914 阅读 · 0 评论 -
基于Visual C++6.0的DLL编程实现
转自本文通过通俗易懂的方式,全面介绍了动态链接库的概念、动态链接库的创建和动态链接库的链接,并给出个简单明了的例子,相信读者看了本文后,能够创建自己的动态链接库并应用到后续的软件开发当中去了,当然,读者要熟练操作DLL,还需要在大量的实践中不断摸索,希望本文能起到抛砖引玉的作用。一、前言 自从微软推出16位的Windows操作系统起,此后每种版本的Windows操作系统都转载 2014-08-18 00:34:17 · 828 阅读 · 0 评论 -
keybd_event函数用法
转自键盘模拟技术是在编写游戏外挂时经常使用的技术。但是由于很多游戏采用了directinput的方式,使得发送的一般键盘消息无法被程序收到。这时候需要使用驱动级的键盘模拟技术,直接发送键盘的硬件扫描码,达到模拟键盘的目的。 目前网络上流行的做法是使用winio模拟键盘硬件扫描码,但是winio并不稳定,时常有严重错误发生。这里电王介绍一种稳定方便的方式——使用ke转载 2014-08-15 15:02:33 · 2956 阅读 · 0 评论 -
C++ static、const和static const 以及它们的初始化
转自C++ static、const和static const 以及它们的初始化 const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。 static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一转载 2014-10-22 22:18:13 · 534 阅读 · 0 评论 -
c++中的隐藏、重载、覆盖(重写)
转自1 重载与覆盖 成员函数被重载的特征:(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual关键字可有可无。 覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须转载 2014-10-26 22:05:20 · 514 阅读 · 0 评论 -
Linux的直接I/O机制
转自对于传统的操作系统来说,普通的 I/O 操作一般会被内核缓存,这种 I/O 被称作缓存 I/O。本文所介绍的文件访问机制不经过操作系统内核的缓存,数据直接在磁盘和应用程序地址空间进行传输,所以该文件访问的机制称作为直接 I/O。Linux 中就提供了这样一种文件访问机制,对于那种将 I/O 缓存存放在用户地址空间的应用程序来说,直接 I/O 是一种非常高效的手段。本转载 2014-09-19 19:24:07 · 1373 阅读 · 0 评论 -
内存映射文件原理探索
转自一直都对内存映射文件这个概念很模糊,不知道它和虚拟内存有什么区别,而且映射这个词也很让人迷茫,今天终于搞清楚了。。。下面,我先解释一下我对映射这个词的理解,再区分一下几个容易混淆的概念,之后,什么是内存映射就很明朗了。原理首先,“映射”这个词,就和数学课上说的“一一映射”是一个意思,就是建立一种一一对应关系,在这里主要是只 硬盘上文件 的位置与进程 逻辑地址空间转载 2014-09-19 14:02:28 · 552 阅读 · 0 评论 -
Linux UDP C/S例子
转自Linux UDP C/S例子UDP C/S编程的步骤如下图所示与TCP C/S通信的区别在于:服务端没有设置监听和等待连接的过程。客户端没有连接服务端的过程。基于UDP的通信时不可靠地,面向无连接的,发送的数据无法确切知道对方收到没有,就算对方根本不存在,也可以发送数据出去。这样的通信通常用在对可靠性、安全性要求不高的地方,比如语音通信(没听清楚可以让转载 2014-12-17 16:49:51 · 622 阅读 · 0 评论 -
GCC 静态库和动态库
转自其中 hello.c 和 main.c 在同一个目录下, hello.h在上一个目录。先生成 xxx.o 文件$ gcc hello.c -c ==> hello.o$ gcc main.c -c ==> error : no hello.h$ gcc main.c -c -I ../ ==> main.o -I 指定头文件的搜索目录( I 是大小的 i转载 2014-11-18 20:35:52 · 941 阅读 · 2 评论 -
牛顿迭代法实现平方根函数sqrt
转自利用牛顿迭代法自己写平方根函数sqrt 给定一个正数a,不用库函数求其平方根。 设其平方根为x,则有x2=a,即x2-a=0。设函数f(x)= x2-a,则可得图示红色的函数曲线。在曲线上任取一点(x0,f(x0)),其中x0≠0那么曲线上该点的切线方程为 (1-1)转载 2014-11-06 16:49:57 · 3669 阅读 · 0 评论 -
Sqrt函数高效实现
转自一个Sqrt函数引发的血案我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来实现这个经常调用的函数呢?虽然有可能你平时没有想过这个问题,不过正所谓是“临阵磨枪,不快也光”,你“眉头一皱,计上心来”,这个不是太简单了嘛,用二分的方法,在一个区间中,每次转载 2014-11-06 16:45:47 · 682 阅读 · 0 评论 -
C++引用的实质
在看这篇文章之前,请你先要明白一点:那就是c++为我们所提供的各种存取控制仅仅是在编译阶段给我们的限制,也就是说是编译器确保了你在完成任务之前的正确行为,如果你的行为不正确,那么你休想构造出任何可执行程序来。但如果真正到了产生可执行代码阶段,无论是c,c++,还是pascal,大家都一样,你认为c和c++编译器产生的机器代码会有所不同吗,你认为c++产生的机器代码会有访问限制吗?那么你错了。什么c转载 2014-10-22 12:37:16 · 656 阅读 · 0 评论 -
c语言的自动类型转换
转自c语言的自动类型转换自动转换遵循以下规则:1) 若参与运算量的类型不同,则先转换成同一类型,然后进行运算。2) 转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。 a.若两种类型的字节数不同,转换成字节数高的类型b.若两种类型的字节数相同,转载 2014-10-20 15:01:25 · 606 阅读 · 0 评论 -
C++函数中那些不可以被声明为虚函数的函数
转自C++函数中那些不可以被声明为虚函数的函数常见的不不能声明为虚函数的有:普通函数(非成员函数);静态成员函数;内联成员函数;构造函数;友元函数。1、为什么C++不支持普通函数为虚函数? 普通函数(非成员函数)只能被overload,不能被override,声明为虚函数也没有什么意思,因此编译器会在编译时邦定函数。2、为什么C++不支持构造函数为虚函转载 2014-11-02 21:59:21 · 513 阅读 · 0 评论 -
通过金矿模型介绍动态规划
转自对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读者感到迷惑,引导读者去思考,所以如果你在阅读中发现有不通顺的地方,让你产生错误理解的地方,让你难得读懂的地方,请跟贴指出,谢谢!转载 2014-10-31 17:26:25 · 931 阅读 · 0 评论 -
寻找变位词
转自1.前言最近的天气真的好热,跟随着温度的升高人也莫名的变得容易烦躁。在这炎热的夏日里,什么事情都提不起兴趣!距离上一篇博文,不知觉间一周的时间就快过去了,最近一周工作异常繁忙,不知觉间学习的计划就被打乱。其实,做什么事情都是一样--一旦放下就很难再提起。人生就是和另一个我战斗的过程,为了不被另一个我打败,我决定,今天无论如何也得写的什么。转载 2014-10-14 14:18:16 · 2360 阅读 · 0 评论 -
康托展开及其逆运算
康托展开的wiki介绍原创 2014-10-03 11:49:31 · 942 阅读 · 0 评论 -
互斥锁Mutex与信号量Semaphore的区别
转自class semaphore{public: Semaphore(int count, int max_count); ~Semaphore(); void Unsignal();//等待操作P,count--,如果count==0则等待 void Signal();//释放操作V,count++}classmutex{转载 2014-10-28 16:11:38 · 1101 阅读 · 0 评论 -
输出一个集合的所有子集(算法)
转自输出一个集合的所有子集(算法)时间复杂度很显然,最少也是2^n,空间复杂度,是n,代码比较简单(每个元素要么在子集中,要么不在,用 j 的二进制形式的每一位代表数组a中对应的位置的元素是否在子集中,例如,当i = 5时, j = i = 5,那么j = 0101; 我们对应的输出 a[0], a[2], 这个过程在while循环中完成)[cpp] v转载 2014-10-02 20:53:32 · 5761 阅读 · 0 评论 -
c/c++强制类型转换
转自c/c++强制类型转换Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意?A:转换的含义是通过改变一个变量的类型为别的类型从而改变该变量的表示方式。为了类型转换一个简单对象为另一个对象你会使用传统的类型转换操作符。比如,为了转换一个类型为doubole的浮点数的指针转载 2014-10-27 22:38:13 · 520 阅读 · 0 评论 -
运算符重载详解
转自运算符重载详解 1.运算符重载定义:C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。运算符重载是通过创建运转载 2014-10-24 16:19:05 · 671 阅读 · 0 评论 -
size_t为何这么重要?
原文Why size_t matters翻译 2014-09-21 16:38:23 · 16350 阅读 · 8 评论 -
浅谈C语言中的联合体
转自浅谈C语言中的联合体当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union)。在C Programming Language 一书中对于联合体是这么描述的: 1)联合体是一个结构; 2)它的所有成员相对于基地址的偏移量都为0; 3)此结构空间要大到足够容纳最"宽"的成员; 4)其对齐方式要转载 2014-08-15 23:54:27 · 519 阅读 · 0 评论 -
模拟键盘输入 : SendMessage, keybd_event, PostKeybdMessage
转自目的 最近项目要求在Windows CE下模拟键盘输入,上网搜索了一下,发现有3个API可以用:SendMessage,keybd_event,PostKeybdMessage。 分析 1. SendMessage (1) 模拟输入字符 - ANSI// Input a 'a'::SendMessage(hWnd转载 2014-08-15 16:01:52 · 7011 阅读 · 0 评论 -
C++ 类访问控制(public/protected/private)
转自C++ 类访问控制(public/protected/private)C++中 public,protected, private 访问标号小结第一:private, public, protected 访问标号的访问范围。private:只能由1.该类中的函数、2.其友元函数访问。不能被任何其他访问,该类的对象也不能访问。prote转载 2014-08-01 14:08:59 · 567 阅读 · 0 评论