c++源码学习
2014-06-01 07:32:19 a88141302 阅读数 610
通过源码学习C++函数指针
 1:函数指针详解http://www.cnblogs.com/iuices/archive/2011/11/21/2257710.html
2:正文:
  C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
在CCObject中有这么一堆宏定义,一开始也不是很明白是干嘛用的,做了几个实验后大概猜出他们的作用了;
这堆就是CCObject中的定义。
typedef void (CCObject::*SEL_SCHEDULE)(float);
typedef void (CCObject::*SEL_CallFunc)();
typedef void (CCObject::*SEL_CallFuncN)(CCNode*);
typedef void (CCObject::*SEL_CallFuncND)(CCNode*, void*);
typedef void (CCObject::*SEL_CallFuncO)(CCObject*);
typedef void (CCObject::*SEL_MenuHandler)(CCObject*);
typedef void (CCObject::*SEL_EventHandler)(CCEvent*);
typedef int (CCObject::*SEL_Compare)(CCObject*);

#define schedule_selector(_SELECTOR) (SEL_SCHEDULE)(&_SELECTOR)
#define callfunc_selector(_SELECTOR) (SEL_CallFunc)(&_SELECTOR)
#define callfuncN_selector(_SELECTOR) (SEL_CallFuncN)(&_SELECTOR)
#define callfuncND_selector(_SELECTOR) (SEL_CallFuncND)(&_SELECTOR)
#define callfuncO_selector(_SELECTOR) (SEL_CallFuncO)(&_SELECTOR)
#define menu_selector(_SELECTOR) (SEL_MenuHandler)(&_SELECTOR)
#define event_selector(_SELECTOR) (SEL_EventHandler)(&_SELECTOR)
#define compare_selector(_SELECTOR) (SEL_Compare)(&_SELECTOR)

下面我们抽取某一个来做实验

//表示定义了一个返回值为void,参数为float的函数指针SEL_SCHEDULE;CCObject只是函数的命名空间。
typedef void (CCObject::*SEL_SCHEDULE)(float);
//宏定义,将括号内的函数取地址获得该函数的指针并转换为SEL_SCHEDULE类型.
#define schedule_selector(_SELECTOR) (SEL_SCHEDULE)(&_SELECTOR)

this->schedule(schedule_selector(HelloWorld::update));

void HelloWorld::update(float delta){…一些处理语句…}

这种用法作为一个java来说我一开始觉得好像反射。通过函数名调用函数。也没看懂前面的用法。所以自己写了一个简单的程序做测试。

#include<stdio.h>
typedef void (*HELLO)(int);
#define func(_FUN_NAME_) (HELLO)(&_FUN_NAME_)

void printLog(int i)
{
    printf("Log.....%d\n",i);
}
int main()
{
    (func(printLog))(3);
}

这样写出来就很简单明了了。首先我们定义了一个函数指针HELLO,这个函数指针的类型是指向一个返回值为void,参数为int型的函数指针。下面我们又用宏定义了一个func转换,通过函数名取地址获得函数的指针并将其转换为HELLO类型。主函数式调用。可以看到当我输入函数名并在小括号中传入3后控制台将会打印
Log……3
这么一句话。而在cocos2dx中的源代码调用远比我这里的复杂多。可以想象这种和java的反射机制类似,又或者叫代理设计模式。

2019-05-30 11:15:15 nullganbadie 阅读数 10

1、简述

本博客主要记载在基于开源项目Geopsy的二次开发过程中的学习。

2、内容纪录

2.1  动态库的编写

QGpCoreToolDllExport.h 定义dll的宏,被需要生成dll的函数和类的文件包含。

作为动态库,在需要导出的类或函数前必须使用关键字__declspec(dllexport)声明,因此动态库需要定义宏DLL_EXPORTS。

#ifndef QGPCORETOOLSDLLEXPORT_H
#define QGPCORETOOLSDLLEXPORT_H

/* *_STATIC and MAKE_*_DLL are defined by the capitalization of
  the package name, included in the compiler options (only for Windows).
  Use directly WIN32 to allow transparent usage with or without Qt.
  QGpCoreToolsStatic.h may contain QGPCORETOOLS_STATIC macro definition.
  This define was introduced there to mark this library as static for
  all projects that link to this library.
*/

#include "QGpCoreToolsStatic.h"

#if defined(WIN32) && !defined(QGPCORETOOLS_STATIC)
#ifdef MAKE_QGPCORETOOLS_DLL
# define QGPCORETOOLS_EXPORT __declspec(dllexport)
#else
# define QGPCORETOOLS_EXPORT __declspec(dllimport)
#endif
#else
# define QGPCORETOOLS_EXPORT
#endif

#endif  // QGPCORETOOLSDLLEXPORT_H

2.2 static关键字

 本小节的static主要用于静态成员和静态成员函数。静态成员变量要初始化,静态成员函数只能访问静态成员,静态成员函数的调用方式,宏定义的作用。

//***************PackageInfo.h*******************
#ifndef PACKAGEINFO_H
#define PACKAGEINFO_H

#include <QtCore>

#include "QGpCoreToolsDLLExport.h"

class QGPCORETOOLS_EXPORT PackageInfo
{
public:
  PackageInfo(QString package,
              QString binDir,
              QString libDir,
              QString includeDir,
              QString shareDir,
              QString version,
              QString versionType,
              QString buildTime,
              QString gitCommit,
              QString distribtion,
              QString authors);
  PackageInfo(const PackageInfo& o);
  
  static const PackageInfo * package(QString package);
  static QList<PackageInfo> * list();
private:
  ...

  static QList<PackageInfo> * _list;
};
// 宏定义:用于操作函数static QList<PackageInfo> * list();
// 其中##的作用是连接符
#define PACKAGE_INFO(package, PACKAGE) \
  class PACKAGE##InfoInit \
  { \
  public: \
    PACKAGE##InfoInit() { \
      PackageInfo::list()->append(PackageInfo(package, \
            PackageInfo::getInstallDir("geopsy", package, "binDir", QString::fromUtf8(PACKAGE##_BINDIR)), \
            PackageInfo::getInstallDir("geopsy", package, "libDir", QString::fromUtf8(PACKAGE##_LIBDIR)), \
            PackageInfo::getInstallDir("geopsy", package, "includeDir", QString::fromUtf8(PACKAGE##_INCDIR)), \
            PackageInfo::getInstallDir("geopsy", package, "shareDir", QString::fromUtf8(PACKAGE##_SHAREDIR)), \
            PACKAGE##_VERSION, \
            PACKAGE##_VERSION_TYPE, \
            PACKAGE##_BUILD_TIME, \
            PACKAGE##_GIT_COMMIT, \
            PACKAGE##_DISTRIBUTION, \
            QString::fromUtf8(PACKAGE##_AUTHORS))); \
    } \
  }; \
  static PACKAGE##InfoInit autoInit##PACKAGE;



//*********************PackageInfo.cpp***********************
QList<PackageInfo> * PackageInfo::_list=0;

PackageInfo::PackageInfo(QString package,
                         QString binDir,
                         QString libDir,
                         QString includeDir,
                         QString shareDir,
                         QString version,
                         QString versionType,
                         QString buildTime,
                         QString gitCommit,
                         QString distribution,
                         QString authors)
{
  _package=package;
  _binDir=binDir;
  _libDir=libDir;
  _includeDir=includeDir;
  _shareDir=shareDir;
  _version=version;
  _versionType=versionType;
  _buildTime=buildTime;
  _gitCommit=gitCommit;
  _distribution=distribution;
  _authors=authors;
}

/*!
  Copy constructor
*/
PackageInfo::PackageInfo(const PackageInfo& o)
{
  ...
}

QList<PackageInfo> * PackageInfo::list()
{
// 静态成员函数访问类的静态成员,不能访问非静态成员
  if(!_list) _list=new QList<PackageInfo>;
  return _list;
}

const PackageInfo * PackageInfo::package(QString package)
{
// 成员函数访问静态成员变量
  for(QList<PackageInfo>::iterator it=PackageInfo::_list->begin();it!=PackageInfo::_list->end(); it++ ) {
    if(package==it->package()) {
      return &(*it);
    }
  }
  return 0;
}

2.3 宏定义

宏定义表现的本质是代码的替换,用宏定义的内容替换宏。

定义变量和函数(带参宏,作用类似于函数)是常见的宏,有的宏如上一小节所示:定义一个类并实例化一个类的变量,有的宏则定义一个类的一个公有的静态成员函数,让人不禁联想到Q_OBJECT。

#define N 100    // 宏定义变量

#define MAX(a, b) ( (a) > (b) : (a) ? (b) )    // 带参宏定义


//**********Translation.h************
#define TRANSLATIONS(context) \
public: \
    static QString tr(const char * s, const char * comments=nullptr)\
 {return QCoreApplication::translate(context, s, comments);}

//**********Translation.cpp************
class QGPCORETOOLS_EXPORT PathTranslatorOptions
{
    TRANSLATIONS("PathTranslatorOptions")    // 相当于定义了一个public函数
public:
    PathTranslatorOptions();
    ~PathTranslatorOptions();
    ...
}

 

2019-05-04 21:45:53 fqbqrr 阅读数 495

学习零起点c++源码笔记
python些许经验.好久不写,手生了.

要注意字典是以:分隔.
整数除法是//,免得除成浮点数
写程序地址+=w,在循环中要注意.不要加重复了.
不要随便return 应该 continue
串转数字时,先要判断是否是数字.(.isdigit())
print(,都有可能出现,打印出gbk解析不了的符).真是.
有些网站,先爬取内容,再来分析.免得麻烦.
range(,-1,-1)这样倒着数.-1.不是0,或其它1呀什么的.
好久不写,错误百出.
firefox的缓冲头,在后面.点错了..
if判断式后面得有:.
每一页下载过的要记录下来.免得断开了,又找不着.
空 函数();          
空 函数();       
空 函数();      
空 函数(双精);       
//普通函数重载,是可以都命名为函数的
    立方体 a;           
    a.(2,3);          
    a.();          
//成员函数重载类似
//常成员或者引用成员都不可赋值的,只能初化
    A(整 a,整 b):(a),(b){}
    //总为引用成员,只能这样初化
A(A&t){输出<<"复制构造函数运行\n";n=t.n;m=t.m;}
    ~A(){删 x;x=无效;}
//析构对象的同时删除成员指针指向的内存空间,为了稳妥起见将指针赋为空
//浅层复制
        *x=*(a.x);                  
//读取旧对象的成员指针x指向的空间处的数据并赋给新对象的成员指针x所指向的内存区域
    双精 a=12.3456789012345;
    输出<<置精度(15)<<a;
    符号 双精(){中 i;}
    A a(99.9);
    输出<<"双精(a):"<<双精(a)<<行尾;
//可以这样
    A a(99);          
    a.();
    a=1000;          
//隐式转换了,a可通过数字直接转换&符号++(){++n;*;}(常 数&s){->n=s.n;输出<<"复制构造函数执行\n";}
    //这样返回&,仔细思考
    数 x=++i; 
    //因为是构造对象并用另一个对象对它进行初始化,
   //因此右侧即使按别名返回对象,也会调用复制构造函数。
    i=++i;//调用赋值运算符函数"="进行赋值,
    //右侧按引用返回对象不会调用复制构造函数,
    //按值返回对象则会调用复制构造函数
常 数&符号++(){++n;*;}
常 数 符号++(整 o){数 临时(*);++n;中 临时;}
    x=i++;//这一步构造了两个,一是函数中,一是返回
//重载自加
//++i与i++,
    常 数 符号+(常 数&r){中 数(n+r.());}
    常 数&符号=(常 数&r){(==&r)*;*n=r.();*;
    }
//常数赋值
    空 喜欢(){房间();}//子直接调用父的函数
    空 你好(整 i){}//常类对象,调用的你好方法
类 D:公 C
{:
    整 数(){4;}a(){中 A::();}b(){中 B::();}c(){中 C::();}
};
//减少混淆
    c.A::你好();           //基类A的你好函数(成员名限定由类名A加域操作符::组成)
    c.B::你好();           //基类B的你好函数


//枚的用法:    
    枚 天{星期日,星期一,星期二,星期三,星期四,星期五,星期六};
    天 今天;今天=星期一;
   B b;
   b.(4,6);
   B&rb=b;
   输出<<rb.()<<行尾;//10
   A a;
   a.(7,8);
   输出<<a.()<<行尾;//15
   A&ra=b;                        
   输出<<ra.()<<行尾;//10,派生类给基类指针,仍是派生类       
  输出<<p->()<<行尾;
  输出<<p->A::();//使用父类取.
  父亲*p父亲=新 子;//这个为基,先是父构造,再是子构造   
  p父亲->();//父非虚,调用父 
  p父亲->();//父为虚,调用子
  删 p父亲;          
//编译时静态:
构 A{整 取(){1;}};
构 B:公 A{整 取(){2;}};
   A a;整 一=a.();输出<<"a的值是:"<<<<行尾;
   B b;=b.();输出<<"b的值是:"<<<<行尾;
//a为1,b为2
构 A{整 取(){1;}};
构 B:公 A{整 取(){2;}};
A*p;1:p=新 A;;2:p=新 B;;输出<<p->();
//输出一直为1,运行时静态,没有虚,运行时静态只为1
构 A{虚 整 取(){1;}};
构 B:公 A{整 取(){2;}};
A*p;1:p=新 A;;2:p=新 B;;输出<<p->();
//1,或2,运行时动态,有虚在
构 A{虚 整 取(){1;}};
构 B:公 A{整 取(){2;}};
A*p;A a;B b;p=&a;
整 一=p->();输出<<"a的值是:"<<<<行尾;
p=&b;=p->();输出<<"b的值是:"<<<<行尾;
//编译时动态,1,2
A p;1:p=A();2:p=B();//总是输出1,编译时动态
//1执行父类的构造函数创建一个父类临时对象并赋给p
//2执行子类的构造函数创建一个子类临时对象并赋给p
   A*p=0;                 
//声明一个指向基类A的指针p,并将其赋值为0。这是因为指针在使用时须赋予一个内存地址,没有也要赋一个0值
//基类.虚 一();调用非虚其它相同名函数.
//继承类,同样如此,都有相同名字函数,只第一个为虚
//则各调用各基类调用基,继承调用继承
空 一(父亲);两个(父亲*);(父亲&);1:p=新 子;(*p);//对象2:p=新 女儿;两个(p);//地址             ;3:p=新 父亲;(*p);//为引用          
//1将对象作为参数传递给函数one()中
//2将对象的内存地址传递到函数two()中
又 空(::*p)();
//定义成员函数指针
p 函数[3]={&::,&::,&::燃烧};
//成员函数数组*pp=0;//类对象
(pp->*函数[n-1])();//核心在此
//其实等价于(函数(*pp,参数))(*p[5])(&,&);'1':p[i]=平方;;'2':p[i]=立方体;;'3':p[i]=交换;;
//函数指针数组,后面均为函数
//使用方式
p[i](a,b);           
//与向量<共针<...>>类似
//利用好将函数<>作为对象,来与模板结合好(人类::*pf)()=0;//类的函数指针,这是成员针'1':p=新 妈;;'2':p=新 父亲;;'3':p=新 叔叔;;
//p变化,pf变化,参数变化,千变万化'1':pf=&人类::;;'2':pf=&人类::;;
(p->*pf)();//核心.p变化,pf变化,参数变化,
整 符号++(){输出<<"++i\n";rx++;中 rx;}
整 符号++(){输出<<"i++\n";整 i=rx;rx++;中 i;}
//前加与后加<类 T>
空 显示(T a){输出<<"模板函数!"<<a<<行尾;}<>空 显示<>(整 a){输出<<"具体化模板函数:"<<a<<行尾;}
//特化,需要表示出剩余的模板参数<类 T1,类 T2=>类 人们;//默认类型<<类 T>类 TT,类 T>
o流&符号<<(o流&,常 TT<T>&tt){}
//这种,窗口类<单参>都包含完了
//联 的目标减少字节占用空间.{整 a;整 b;};
//这两个是一个整体,输入a,b变,输入b,a变
    输出<<"1&1:"<<(1&1)<<行尾;
    输出<<"1&0:"<<(1&0)<<行尾;
    输出<<"0&1:"<<(0&1)<<行尾;
    输出<<"0&0:"<<(0&0)<<行尾;
    输出<<"1&2:"<<(1&2)<<行尾;
//第1个为1,其余均为0
    位集<8>1(85),2(0); //均为0
    输出<<1<<"&"<<2<<":"<<(1&2)<<行尾;
    位集<8>3(73),4(85); //取85相关1位
    输出<<3<<"&"<<4<<":"<<(3&4)<<行尾;
    位集<8>5(73),6(15); //取低4位
    输出<<5<<"&"<<6<<":"<<(5&6)<<行尾;
    位集<8>7(73),8(240); //取高4位
    输出<<7<<"&"<<8<<":"<<(7&8)<<行尾;
    整 a=1,b=2;a=a^b;b=b^a;a=a^b;
    输出<<"a:"<<a<<"b:"<<b<<行尾;
//交换两个数
a=a&~1;//1取反,不论a是多少位数,这样都能将最后1位清0
//三个条件:(1)该对象是指针或引用形式;(2)该对象的静态与动态类型不同;(3)应用场景为带虚函数的继承体系结构。
//多态,差不多了.

其它的看不进去了.暂时就这样吧.

2017-06-27 20:34:40 huangaijuan1 阅读数 272

1.mutable

在C++中,mutable是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中,甚至结构体变量或者类对象为const,其mutable成员也可以被修改。
例子:
struct A{
int a;
mutable int b;
        }
const  A  a1 = {1,2}
                a1.a = 3;      //错误
                a1.b = 4;     //正确

2.申请内存的几个函数

2.1 malloc与free        --------用户空间,堆上动态申请的内存,C++/C语言的标准库函数
      kmalloc 与kfree            ----------内核空间,物理连续
        vmalloc 与vfree:         -------内核空间,物理不连续,虚拟连续

2.2 mmap与munmap -----mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。
2.3 new和delete ------是C++的运算符
2.4 posix_memalign和free ----申请内存对齐的内存地址

3.getenv()

val = getenv("环境变量名") 
获取指定环境变量名的值,若没有则返回空字符。

4.unlikely()和likely()

使用likely ,执行if后面语句的可能性大些,编译器将if{}是的内容编译到前面, 使用unlikely ,执行else后面语句的可能性大些,编译器将else{}里的内容编译到前面。这样有利于cpu预取,提高预取指令的正确率,因而可提高效率。

2014-09-12 10:04:11 wo_xiao_lin 阅读数 425

C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码 。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建 议,以进一步加强这方面的清单。  

0、http://www.boost.org/--boost库的官方网站
1、http://snippets.dzone.com/tag/c/ --数以千计的有用的C语言源代码片段
2、http://www.hotscripts.com/category/c-cpp/scripts-programs/ Hotscripts --提供数以百计的C和C++脚本和程序。所有程序都分为不同的类别。 
3、http://www.planetsourcecode.com/vb/default.asp?lngWId=3 --超过万行C和C++免费的源代码 
4、http://freshmeat.net/browse/164/ --超过9000个C编写的项目。 
5、http://www.daniweb.com/code/c.html --DANIWEB提供的实用代码段 。 
6、http://www.programmersheaven.com/tags/C/ --programmersheaven.com上的C编程资源。 
7、http://www.ddj.com/code/ddj.html --Dr. Dobb’s Journal的源代码。 
8、http://www.cprogramming.com/cgi-bin/source/source.cgi --C和C + +编程资源。
9、http://www.codecogs.com/ --CodeCogs是一项协作的开放源码库,C/C++的数值方面的组件。 
10、http://www.google.com /codesearch?q=programming++lang:c&cs_r=lang:c

      http://www.google.com/codesearch?q=programming++lang:c&cs_r=lang:c --谷歌代码的C源代码。 
11、http://www.codepedia.com/1/C --CodePedia是一个开放的关于系统编程和其他与电脑有关的议题。 
12、http://www.cis.temple.edu/~ingargio/cis71/code/ --为学生提供的一个简单的C语言程序的列表。 
13、http://www.codeproject.com/?cat=2 --codeproject提供的C/C++资源代码项目。 
14、http://www.thefreecountry.com/sourcecode/cpp.shtml --以下是一些C和C++库的DLL,VCLs,源代码,元件,模块,应用程序框       架,类库,源代码片段等,你可以在您的项目中使用而不需要支付费用和版税。 
15、http://people.sc.fsu.edu /~burkardt/cpp_src/cpp_src.html

      http://people.sc.fsu.edu/~burkardt/cpp_src/cpp_src.html [/URL] --这是一个全面的关于C++的345个源代码清单。 
16、http://www.cplusplus.com/src/ --C++写的通用控制台程序和Windows程序代码清单。 
17、http://users.cs.fiu.edu/~weiss/dsaa_c++/code/ --C++语言数据结构与算法分析(第二版)的源代码。 
18、http://c.snippets.org/ --C源代码片段。 
19、http://www.bbdsoft.com/downloads.html --C++源代码。 
20、http://www.moshier.net/ 天文学和数值软件源代码 
21、http://cplus.about.com/od/cgames/C_Games_with_Source_Code.htm --游戏有关的C++源代码。 
22、http://cliodhna.cop.uop.edu /~hetrick/c-sources.html

      http://cliodhna.cop.uop.edu/~hetrick/c-sources.html --免费的C/C++数值计算源代码。 
23、http://www.mathtools.net/C_C__/Utilities/index.html --C/C++工具。 
24、http://www.programmerworld.net/resources/c_library.htm --免费C++源代码和其它有用的工具。 
25、http://www.cmcrossroads.com/bradapp/links/cplusplus-links.html --布拉德阿普尔顿的C++链接-资源,项目,图书馆,教学和编码。 
26、http://www.robertnz.net/cpp_site.html --这是一个收集了数C/C++网站链接列表的网页。 
27、http://www.josuttis.com/libbook/examples.html --在这里,你可以看到并下载所有的本书的C++标准库例子 。 
28、ftp://66.77.27.238/sourcecode/cuj/ --C/C++用户杂志 
29、ftp://66.77.27.238/sourcecode/wd/ --Windows开发者网络 
30、http://www.einet.net/directory/65892/Developers.htm --C程序 
31、http://www.daniweb.com/code/cplusplus.html --实用代码段。 
32、http://snippets.dzone.com/tag/c --C++源代码 
33、http://www.programmersheaven.com/tags/C --C++编程资源,programmersheaven.com 
34、http://www.google.com/codesearch?hl=en&lr=&q=programming --谷歌代码搜索-C++编程语言 
35、http://www.codepedia.com/1/Cpp --CodePedia是一个开放的关于系统编程和其他与电脑有关的议题的网站。 
36、http://www.codebeach.com/index.asp?TabID=1&CategoryID=3 --C++源代码,Codebeach提供 
37、http://freshmeat.net/browse/165/ --5000项目写的C++编程语言 
38、http://cplus.about.com/od/codelibrary/Code_Library_for_C_C_and_C.htm --代码库C、C + +和C#。 
39、http://www.c.happycodings.com/ --Visual Basic、PHP、ASP技术、C、C++大全。 
40、http://www.blueparrots.com/ --Borland C游戏,图像和声音源代码范例。 
41、http://www.java2s.com/Code/Cpp/CatalogCpp.htm --C++源代码。 
42、http://www.yeohhs.com/modules/mydownloads/ --C与C++电子书和源代码示例。 
43、http://www.brpreiss.com/books/opus4/programs/index.html C++的数学方程和公式源代码。 
44、[URL=http://users.cs.fiu.edu][/URL]http://users.cs.fiu.edu/ C++。 
45、[URL=http://www.josuttis.com/libbook/examples.html][/URL]

      http://www.josuttis.com/libbook/examples.html --C++标准库-教程和参考资料。 
46、http://emr.cs.uiuc.edu/~reingold/calendars.shtml Edward M. Reingold's Calendar Book, Papers, and Code。 
47、http://cpp.snippets.org/ --c++源代码档案。 
48、http://ubiety.uwaterloo.ca/~tveldhui/papers/techniques/ --用C和C++的解决科学问题。 
49、http://c.ittoolbox.com/topics/core-c/ --C/C++的IT工具框。 
50、http://www.le.ac.uk/cc/tutorials/c/ccccdbas.html --本文件中包含有大量的C示例程序。

50个C++源码学习网站

阅读数 190

C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建议,以进一步加强这方面的清单。 0、http://www.boost.org/--boost库的官方网站1、http://snippets.dz

博文 来自: setseqq22

C++源码

阅读数 937

Code::Blocks  link   writteninC++Opensourceprojectforc++developer? linkOpenSourceC++projectsforbeginnerslinkBoostisthefirstprojectonecanthinkabout.Itisalibrary,butverywellwritten,soyouwilllearnalot.  这个还可以,比较出名,也易

博文 来自: shurenjob_

C++ STL 源码学习(之deque篇)

阅读数 945

STL中所谓的双端队列的实现,从源码中可以一览其复杂性。

博文 来自: u011907342

C++ 发送邮件(C++源码)

阅读数 15655

效果这里是类的代码CSendMail.h*************************************************************************/#pragmaoncestructsMailInfo//邮件信息{char*m_pcUserName;//用户登录邮箱的名称

博文 来自: Witch_Soya

nginx源码学习3——定时器c++实现

阅读数 253

本文是这一系列的第三篇,用到了前两篇的内容:nginx内存池:http://blog.csdn.net/liu3daniel/article/details/73381205nginx红黑树封装:http://blog.csdn.net/liu3daniel/article/details/73649577还是老规矩,先是头文件,之后cpp,最后不完全测试。mytool_t

博文 来自: liu3daniel
没有更多推荐了,返回首页