c/c++/vc
文章平均质量分 71
adcxf
c/c , linux ,后端开发
展开
-
sizeof解析
sizeof 关键字:sizeof,字节对齐,多继承,虚拟继承,成员函数指针前向声明:sizeof,一个其貌不扬的家伙,引无数菜鸟竟折腰,小虾我当初也没少犯迷糊,秉着“辛苦我一个,幸福千万人”的伟大思想,我决定将其尽可能详细的总结一下。但当我总结的时候才发现,这个问题既可以简单,又可以复杂,所以本文有转载 2007-08-03 14:16:00 · 753 阅读 · 0 评论 -
strtol函数的说明
long int strtol(const char *nptr,char **endptr,int base);这个函数会将参数nptr字符串根据参数base来转换成长整型数。 参数base范围从2至36,或0。参数base代表采用的进制方式, 如base值为10则采用10进制,若base值为16则采用16进制等。 当base值为0时则是采用10进制做转换,但遇到如’转载 2007-08-22 15:29:00 · 1082 阅读 · 0 评论 -
Big Endian和Little Endian
1.故事的起源“endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。我们一般将endian翻译成“字节序”,将big endian和little endian称作“大尾”和“小尾”。2.什么是Big Endian和Little E转载 2007-10-20 23:02:00 · 711 阅读 · 0 评论 -
可重入函数
一、可重入函数1)什么是可重入性?可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。2)可重入函数转载 2007-11-02 22:01:00 · 858 阅读 · 0 评论 -
volatile
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。使用该关键字的例子如下:int volatile nVint; 当要求使用volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面转载 2007-11-02 22:06:00 · 481 阅读 · 0 评论 -
c++string
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。 好了,进入正题………首先,为了在我们的程序中使用s转载 2008-01-23 11:21:00 · 841 阅读 · 0 评论 -
atoi及itoa 实现
/****atox.c - atoi and atol conversion** Copyright (c) 1989-1997, Microsoft Corporation. All rights reserved.**Purpose:* Converts a character string into an int or long.*******************************转载 2008-01-23 21:22:00 · 755 阅读 · 0 评论 -
C++模板文件组织
前言常遇到询问使用模板到底是否容易的问题,我的回答是:“模板的使用是容易的,但组织编写却不容易”。看看我们几乎每天都能遇到的模板类吧,如STL, ATL, WTL, 以及Boost的模板类,都能体会到这样的滋味:接口简单,操作复杂。我在5年前开始使用模板,那时我看到了MFC的容器类。直到去年我还没有必要自己编写模板类。可是在我需要自己编写模板类时,我首先遇到的事实却是“传统”编程方法(在*.h文件转载 2008-01-22 15:21:00 · 772 阅读 · 0 评论 -
GetMemory 改错
GetMemory 改错 试题4: void GetMemory( char *p ){ p = (char *) malloc( 100 );}void Test( void ) { char *str = NULL; GetMemory( str ); strcpy( str, "hello world" ); printf(转载 2008-01-22 20:04:00 · 1454 阅读 · 1 评论 -
vc预编译头文件
所谓的预编译头就是把一个工程中的某一部分代码,预先编译好放在一个文件里(通常是以.pch为扩展名的),这个文件就称为预编译头文件。这些预先编译好的代码可以是任何的C/C++代码,但是必须是稳定的,在工程开发的过程中不会被经常改变。如果这些代码被修改,则需要重新编译生成预编译头文件。生成预编译头文件很耗时间。预编译头文件通常很大,通常有6-7M大。应该及时清理那些没有用的预编译头文件。转载 2007-11-07 21:56:00 · 1245 阅读 · 0 评论 -
华为的编程规范和范例
目 录 1 排版 6 2 注释原创 2008-01-25 14:25:00 · 1328 阅读 · 0 评论 -
代码静态分析工具PC-LINT安装配置
代码静态分析工具PC-LINT安装配置--step by step 作者:ehui928 2006-5-20 PC-Lint是C/C++软件代码静态分析工具,你可以把它看作是一种更加严格的编译器。它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误。 C语转载 2008-01-25 17:31:00 · 1532 阅读 · 1 评论 -
静态代码检查工具PC-Lint(1)
静态代码检查工具PC-Lint(一)<!--google_ad_client = "pub-3071583485817757";google_ad_width = 300;google_ad_height = 250;google_ad_format = "300x250_as";google_ad_type = "text_image";google_ad_cha转载 2008-01-25 17:43:00 · 1378 阅读 · 0 评论 -
静态代码检查工具PC-Lint(2)
3.5 格式检查 PC-Lint会检查printf和scanf(及其家族)中的格式冲突,例如:printf( "%+c", ... )将产生566告警,因为加号只在数字转换时有用,有超过一百个这样的组合会产生告警,编译器通常不标记这些矛盾,其他的告警还有对坏的格式的抱怨,它们是 557和567。我们遵循ANSI C建立的规则,可能更重要的是我们还对大小不正确的格式进行标记(包括告警5转载 2008-01-25 17:45:00 · 4572 阅读 · 0 评论 -
extern "C"
时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入extern "C"原创 2008-01-26 14:20:00 · 466 阅读 · 0 评论 -
堆、栈及静态数据区详解
五大内存分区 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,转载 2008-01-26 22:11:00 · 839 阅读 · 1 评论 -
各个编程语言经典入门书
在网上看到的各个编程经典入门书,虽然不是完全苟同,但是大部分书籍的列表还是有一定道理的,列出来与大家共享以下:1、Java Java编程语言(第三版)---Java四大名著----James Gosling(Java之父)Java编程思想(第2版)----Java四大名著----Bruce EckelJav转载 2008-01-28 11:06:00 · 1830 阅读 · 0 评论 -
编程修养
什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对于速度快,只要编得多也就熟能生巧了。我认为好的程序员应该有以下几方面的素质: 1、有专研精神,勤学善问、举一反三。 2、积极向上的态度,有创造性思维。 3、与人积极交流沟通的能力,有团队精神。 4、谦虚谨慎,戒骄戒燥。 5、写出的代码质量高。包转载 2008-01-28 14:37:00 · 751 阅读 · 0 评论 -
#pragma详解
在#Pragma是预处理指令它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。#pragma指令对每个编译器给出了一个方法,在保持与C和C ++语言完全兼容的情况下,给出主机或操作系统专有的特征。依据定义,编译指示是机器或操作系统专有的,且对于每个编译器都是不同的。其格式一般为: #Pragma Para其中Para 为参数,下面来看一些常用的参数。(1)message 参数。 Mes转载 2008-01-28 16:56:00 · 1082 阅读 · 0 评论 -
再论 extern "c"
比如说你用C++开发了一个DLL库,为了能够让C语言也能够调用你的DLL输出(Export)的函数,你需要用extern "C"来强制编译器不要修改你的函数名。通常,在C语言的头文件中经常可以看到类似下面这种形式的代码: #ifdef __cplusplus extern "C" { #endif /**** some declaration or so *****/ #ifdef __转载 2008-01-26 16:27:00 · 652 阅读 · 0 评论 -
CString,int,string,char*之间的转换
《C++标准函数库》中说的 有三个函数可以将字符串的内容转换为字符数组和C—string 1.data(),返回没有”/0“的字符串数组 2,c_str(),返回有”/0“的字符串数组 3,copy() .................................................................int 转 CString:CString.Format(原创 2008-01-26 19:49:00 · 1567 阅读 · 0 评论 -
CString,int,string,char*之间的转换
string 转 CString CString.format("%s", string.c_str());char 转 CString CString.format("%s", char*);char 转 string string s(char *);string 转 char * char *p = string.c_str();CString 转 string stri原创 2008-01-26 19:52:00 · 771 阅读 · 0 评论 -
C++新手必问之头文件
C++新手必问之头文件经常在CSDN以及其他之类的技术论坛上问关于C++ 头文件的问题。提出这些问题的往往就是那些刚学C++的新手。当初我是菜鸟的时候也问过类似的问题。 现在来看看下面两个include: #include // 这个就是1998年标准化以后的标准头文件 #include // 这个就是标准化以前的头文件 更本质上的区别就是iostre转载 2008-01-26 20:53:00 · 623 阅读 · 0 评论 -
C程序运行时内存分布
#include #include void print(char *,int); main() { char *s1 = "abcde"; char *s2 = "abcde"; char s3[] = "abcd"; long int *s4[100]; char *s5 = "abcde"; int a = 5; int b =6;转载 2008-01-26 21:54:00 · 1160 阅读 · 0 评论 -
几道面试题
系统调用与函数的区别 从程序完成的功能来看,函数库提供的函数通常是不需要操作系统的服务,函数是在用户空间内执行的,除非函数涉及到I/O操作等,一般是不会切到核心态的。系统调用是要求操作系统为用户提供进程,提供某种服务,通常是涉及系统的硬件资源和一些敏感的软件资源等。 函数库的函数,尤其与输入输出相关的函数,大多必须通过Linux的系统调用来完成。因此我们可以将函数库的函原创 2008-01-28 19:26:00 · 699 阅读 · 0 评论 -
DUMPBIN.EXE
在使用VC时,可以用DUMPBIN.EXE来得到某个DLL中所输出的符号的清单。如下面的命令:dumpbin -exports Cmpnt1.dll如:C:/WINDOWS/system32>dumpbin -exports msgsvc.dllMicrosoft (R) COFF Binary File Dumper Version 6.00.8447Copyright (C) Micros转载 2008-01-28 19:38:00 · 1273 阅读 · 0 评论 -
你最需要注意的11条要点for C++
下面的这些要点是对所有的C++程序员都适用的。我之所以说它们是最重要的,是因为这些要点中提到的是你通常在C++书中或网站上无法找到的。如:指向成员的指针,这是许多资料中都不愿提到的地方,也是经常出错的地方,甚至是对一些高级的C++程序员也是如此。 这里的要点不仅仅是解释怎样写出更好的代码,更多的是展现出语言规则里面的东西。很显然,它们转载 2008-01-29 11:07:00 · 493 阅读 · 0 评论 -
extern “C”含义深层探索
C++中extern “C”含义深层探索 1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任转载 2008-01-26 14:21:00 · 542 阅读 · 0 评论 -
inline
(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。 inline int min(int first, int secend) {/****/}; inline函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数。与非inline函数不同的是,inline函数转载 2007-11-15 11:37:00 · 497 阅读 · 0 评论 -
深入理解指针
void f2(char *c){ c=(char *)malloc(128); }main(){char *c1=NULL;f2(c1); 返回时得不到分配的地址。}//////////////////////////void f2(char **c){ *c=(char *)malloc(128); }main(){char *c1=NULL;f2(&c1); 返回时将得到分配的地址。原创 2007-11-17 15:08:00 · 532 阅读 · 0 评论 -
XPSP2 PSDK
XPSP2 PSDK Full Download with Local Install Use the full原创 2008-02-15 10:34:00 · 959 阅读 · 0 评论 -
c++虚函数表探究
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这里不转载 2008-02-16 21:41:00 · 1173 阅读 · 0 评论 -
make_plural
string make_plural (size_t ctr , const string &word , const string &ending) { return ( ctr == 1 ) ? word : word + ending; } size_t是一种整型的变量,宽度应该是比int大的,整个函数的意思就是。你传递进来的ctr是1吗?如果是就返回word字符串,如果不是就将两个字符原创 2007-11-30 15:49:00 · 2654 阅读 · 0 评论 -
静态成员变量
独一无二 ----静态成员变量作者:HolyFire我们学习C++的时候知道静态变量的特性,他不是临时变量,在编译期间就已经产成。用一个例子就能说明问题。#include using namespace std;class A{public: A(){ cout原创 2008-02-19 14:30:00 · 795 阅读 · 0 评论 -
C 编程最佳实践
简介本文是为了满足开发人员的需要而写的。我们总结了一套指南,无论作为开发人员还是顾问,这些指南多年来一直都很好地指导着我们,我们把它们作为建议提供给您,希望对您的工作有所帮助。您也许不赞同其中的某些指南,但我们希望您会喜欢其中的一些并在您的编程或移植项目中使用它们。风格与指南 * 使用一种使代码具有可读性和一致性的源代码风格。如果没有团队代码风格或自己的风格,您可以使用与大多数 C 程序员采转载 2008-02-22 18:11:00 · 722 阅读 · 0 评论 -
如何用正确的方法来写出质量好的软件的75条体会
如何用正确的方法来写出质量好的软件的75条体会1. 你们的项目组使用源代码管理工具了么?应该用。VSS、CVS、PVCS、ClearCase、CCC/Harvest、FireFly都可以。我的选择是VSS。2. 你们的项目组使用缺陷管理系统了么?应该用。ClearQuest太复杂,我的推荐是BugZilla。 3. 你们的测试组还在用Word写测试用例么?不要用Word写测试用转载 2008-02-22 18:13:00 · 709 阅读 · 0 评论 -
C陷阱和缺陷学习笔记
C陷阱和缺陷学习笔记: 词法陷阱:1 = 不同于==不要在程序中将两者写错,小心。将表达式与常量比较时,可将常量放在左边。2 &和| 不同于&& 和 ||。3 词法分析中的贪心法:每个符号应该包含尽可能多的字符。如果(编译器的)输入流截至某个字符前都已经分解为一个个符号,那么下一个符号将包括从该字符之后可能组成一个字符的最长字符串原创 2008-02-22 22:21:00 · 711 阅读 · 1 评论 -
给c++程序员的一份礼物——常用工具集
给c++程序员的一份礼物——常用工具集【声明】如需复制、传播,请附上本声明,谢谢。原文出处:http://morningspace.51.net/,moyingzz@etang.com 所谓"工欲善其事,必先利其器",从程序员的角度来讲,好工具的使用总会给人带来事半功倍的效果。面对众多工具/软件,我们应该如何取舍呢。前不久,笔者在csdn的c++论坛发了一篇贴文,以期能征求大家的广泛转载 2008-03-01 22:21:00 · 832 阅读 · 0 评论 -
字符串分割函数
typedef basic_string::size_type S_T; static const S_T npos = -1; vector split(const string& src, string delimit, string null_subst="") { if( src.empty() || delimit.empty() ) throw "sp原创 2007-12-12 22:29:00 · 617 阅读 · 0 评论 -
strtok用法
char * strtok ( char * string, const char * delimiters ); Sequentially truncate string if delimiter is found. If string is not NULL, the function scans string for the first occurrence of any chara原创 2007-12-12 18:07:00 · 766 阅读 · 0 评论