一。
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++的:
安装 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
烦烦烦,烦得想打人!
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,它可以保
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.如果不是天才的
这是对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、 在类在声明常量,
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] 在你定义一个并不是实现某个像矩阵
入门级: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
如何成为一个牛逼的C/C++程序员? .
分类: 学习C/C++经验 2011-04-19 14:48 427人阅读 评论(5) 收藏 举报
这个题目的噱头太大,要真的写起来, 足够写一本书了。
本人是过来人, 结合自身的体会和大家交流一下,希望新人能少走弯路。
每个人的情况不一样,我下面的描述可能并不适合每一个看到这篇文章的人。
一、C/C++语言
如果你的基础很差,
建议不要一开始就学C++语言,从C开始学起,对程序有个初步的认识,循序渐进。C语言的书嘛,先买一本 300
页以内的,把书中的每一个例子都通过键盘敲打进去到 Visual
studio里面去,然后单步执行,逐行调试去看各个变量的值。或者自行添加一些printf语句去输出变量的值。这样当你看完一本书后,
你就有编写小程序的感觉了。
记住,千万不要偷懒,不敲进去,自以为聪明, 能看懂,
或者直接从光盘复制。偷懒的代价是会花费更多的时间学习,最后还没有学会,给自己的自信心造成巨大打击,再也不想学程序了。
C语言
转:http://blog.csdn.net/langeldep/article/details/6293655
作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类,
封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应用过,
但是回过头仔细想想,其实以前自己写过的这些代码,只能是在特定的项目或者特定的环境中使用, 对于自己来说, 在不同的项目中应用,
只需要复制代码, 改改也就可以了, 因为自己写的代码自己很熟悉。问题是, 你封装的这些库, 在给别人使用的时候,
别人用起来是否很方便, 跨平台方面是不是也很通用, 性能是不是足够的好, 是不是支持多线程,
功能是不是也足够强大,可以适用于各种不同的需求。如果你上面这些都做到了, 证明你在这个库上确实花费了一番功夫,
经过了持续的改进和优化。
在日常的开发中, 作为一个程序员,
很多东西已经没有必要再重新开发了, 可以直接拿过来使用, 毕竟21世纪都已经过了N年了。我们没有必要重新发明轮子(不可否认