发博文
个人资料
爱因斯谈
爱因斯谈
  • 博客等级:
  • 博客积分:436
  • 博客访问:24,807
  • 关注人气:3
评论
加载中…
留言
加载中…
友情链接
我的音乐
暂无内容
访客
加载中…
好友
加载中…
博文
标签:

it

分类: C

 一。

C、C++中没有提供 直接获取数组长度的函数,对于存放字符串的字符数组提供了一个strlen函数获取长度,那么对于其他类型的数组如何获取他们的长度呢?其中一种方法是使 用sizeof(array) / sizeof(array[0]), 在C语言中习惯上在 使用时都把它定义成一个宏,比如#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));} 。而在C++中则可以使用模板 技术定义一个函数,比如:

template <class T>

int getArrayLen(T& array)

{

return (sizeof(array) / sizeof(array[0]));

}

这样对于不同类型的数 组都可以使用这个宏或者这个函数来获取数组的长度了。以下是两个Demo程序,一个C语言的,一个C++的:

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

杂谈

分类: Java
安装 subclipse1.6.5 后,eclipse3.6启动自动关闭,并在错语日志中记录如下信息
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x3752804c, pid=4012, tid=3492
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_11-b03 mixed mode)
# Problematic frame:
# C  [libapr-1.dll+0x804c]
#

---------------  T H R E A D  ---------------

Current thread (0x342fc578):  JavaThread 'Worker-0' [_thread_in_native, id=3492]

siginfo: ExceptionCode=0xc0000005, reading address 0x00000000

Registers:
EAX=0x360dbc58, EBX=0x00000000, ECX=0x00000000, EDX=0x00000000
ESP=0x34e68aa4, EBP=0x34e68ab0, ESI=0x33f51538, EDI=0x00000000
EIP=0x3752804c, EFLAGS=0x00010246

Top of Stack: (sp=0x34e68aa4)
0x34e68aa4:   00000000 33f51538 360dbc58 34e6aadc
0
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2011-11-30 12:35)
标签:

杂谈

烦烦烦,烦得想打人!
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

it

分类: Linux

Google是支持开源运动的最大公司之一,它们现在总共发布有超过500个的开源项目(大部分都是利用它们的API来完成),本文将列举一些有趣的开源项目,其中很可能有不少你不知道的哦。


文本文件处理:
Google CRUSH (Custom Reporting Utilities for SHell)

CRUSH是为命令行或shell scripts处理特定文字数据而制作的一系列工具,这里有指南。

C++库和源代码:
Google Breakpad

一个开源的多平台崩溃报告系统。

Google GFlags

Gflags是一个命令行标记的处理库,它可以替代“getopt()”,其内置对C++的支持比如string。指南在此。

Google Glog

Glog库可执行应用级的登陆,提供基于C++式的登陆API,可用于Linux、BSD和Windows。指南见此。

Google PerfTools

这个工具可让开发创建更强大的应用程序,特别是那些用C++模版开发的多线程应用程序,包括TCMalloc, heap-checker, heap-profiler 和cpu-profiler。指南见此还有这里。

Google Sparse Hash

非常节省内存的hash-map。指南见此。

Omaha – Google Update

Omaha,也就是Google Update,它可以保

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2011-09-01 17:51)
标签:

it

分类: Linux

C++ 学习经典C++ 学习经典- -
                                      

1.把C++当成一门新的语言学习(和C没啥关系!真的。);

2.看《Thinking In C++》,不要看《C++变成死相》;
1.把C++当成一门新的语言学习(和C没啥关系!真的。);

2.看《Thinking In C++》,不要看《C++变成死相》;

3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看;

4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言;

5.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点;

6.会用Visual C++,并不说明你会C++;

7.学class并不难,template、STL、generic programming也不过如此——难的是长期坚持实践和不遗余力的博览群书;

8.如果不是天才的

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

it

分类: Linux

这是对C++高效编程的一个总结, 很有指导作用.

一、#include “filename.h”和#include filename.h的区别
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件
#include filename.h是指编译器将从标准库目录中开始查找此文件

二、头文件的作用
加强安全检测
通过头文件可能方便地调用库功能,而不必关心其实现方式

三、 , &修饰符的位置
int i,j;  better for read
 i = new int(0);
 j = 0;
 int &y = i;  pointer's reference
对于和&修饰符,为了避免误解,最好将修饰符紧靠变量名

四、if语句
不要将布尔变量与任何值进行比较,那会很容易出错的。
整形变量必须要有类型相同的值进行比较
浮点变量最好少比相等,可以通过求差与较小的数比较
指针变量要和NULL进行比较,不要和布尔型和整形比较

五、const和#define的比较
const有数据类型,#define没有数据类型
个别编译器中const可以进行调试,#define不可以进行调试
在类中定义常量有两种方式
1、 在类在声明常量,

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

it

分类: Linux

C++之父Bjarne Stroustrup对C++使用者的忠告


http://www.2cto.com/kf/ware/c/2.html
 

C++之父Bjarne Stroustrup 写的The C++ Programming Language (Special Edition) 中各章后

面的忠告。

 

 

 

第1 章致读者

[1] 在编写程序时,你是在为你针对某个问题的解决方案中的思想建立起一种具体表示。让程序的结构尽可能地直接反映这些思想。

[a] 如果你能把“它”看成一个独立的概念,就把它做成一个类。

[b] 如果你能把“它”看成一个独立地实体,就把它做成某个类的一个对象。

[c] 如果两个类有共同的界面,将此界面做成一个抽象类。

[d] 如果两个类的实现有某些显著的共同东西,静这些共性做成一个基类。

[e] 如果一个类是一种对象的容器,将它做成一个模板。

[f] 如果一个函数实现对某容器的一个算法,将它实现为对一族容器可用的模板函数。

[g] 如果一组类、模板等互相之间有逻辑关系,将它们放进一个名字空间力。

[2] 在你定义一个并不是实现某个像矩阵

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2011-09-01 17:47)
标签:

it

分类: Linux


入门级:Ptypes
    Ptypes一个开源轻量级的c++库,包括对一些I/O操作、网络通信、多线程和异常处理的封装。虽然代码有限,包括的内容不少,麻雀虽小,五脏俱全。
    提高:STL Boost和STL ACE
    Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。Boost由于其对跨平台的强调,对标准C++的强调,与编写平台无关。大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文件系统库等)需要链接库。但Boost中也有很多是实验性质的东西,在实际的开发中实用需要谨慎。boost 在一些播放软件和音效中指增强,比如Bass Boost,低音增强。
    Adaptive Communication Environment(自适配通信环境),简称ACE。为一个以C++的Template技术所做成的开放源代码的可跨平台的网络应用程序的程序库套件。它提供了socket/threading/memory management等多种系统调用的面对对象的wrapper

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

it

分类: Linux

如何成为一个牛逼的C/C++程序员? .
分类: 学习C/C++经验 2011-04-19 14:48 427人阅读 评论(5) 收藏 举报
这个题目的噱头太大,要真的写起来, 足够写一本书了。

 

本人是过来人, 结合自身的体会和大家交流一下,希望新人能少走弯路。

 

每个人的情况不一样,我下面的描述可能并不适合每一个看到这篇文章的人。

 

一、C/C++语言

 

      如果你的基础很差, 建议不要一开始就学C++语言,从C开始学起,对程序有个初步的认识,循序渐进。C语言的书嘛,先买一本 300 页以内的,把书中的每一个例子都通过键盘敲打进去到 Visual studio里面去,然后单步执行,逐行调试去看各个变量的值。或者自行添加一些printf语句去输出变量的值。这样当你看完一本书后, 你就有编写小程序的感觉了。

 

记住,千万不要偷懒,不敲进去,自以为聪明, 能看懂, 或者直接从光盘复制。偷懒的代价是会花费更多的时间学习,最后还没有学会,给自己的自信心造成巨大打击,再也不想学程序了。

 

      C语言

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

it

分类: Linux

转:http://blog.csdn.net/langeldep/article/details/6293655

作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应用过, 但是回过头仔细想想,其实以前自己写过的这些代码,只能是在特定的项目或者特定的环境中使用, 对于自己来说, 在不同的项目中应用, 只需要复制代码, 改改也就可以了, 因为自己写的代码自己很熟悉。问题是, 你封装的这些库, 在给别人使用的时候, 别人用起来是否很方便, 跨平台方面是不是也很通用, 性能是不是足够的好, 是不是支持多线程, 功能是不是也足够强大,可以适用于各种不同的需求。如果你上面这些都做到了, 证明你在这个库上确实花费了一番功夫, 经过了持续的改进和优化。

 

       在日常的开发中, 作为一个程序员, 很多东西已经没有必要再重新开发了, 可以直接拿过来使用, 毕竟21世纪都已经过了N年了。我们没有必要重新发明轮子(不可否认

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
  

新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有