C/C++
smilelance
Do it now!
展开
-
在VC里调试标准C语言
在VC里面编译标准C语言程序时需要注意编译参数设置,我在New->Projects下面选择了Win32 Application,产生了一个空的工程,然后新建了一个test.c来测试程序,代码如下:#include void main(void){ printf("hello/n");}结果编译居然不通过,输出错误如下:LIBCD.lib(wincrt0.obj) : e原创 2006-10-01 20:42:00 · 1202 阅读 · 0 评论 -
va_start/va_arg/va_end原理与使用
func( Type para1, Type para2, Type para3, ... ){ /****** Step 1 ******/ va_list ap; va_start( ap, para3 ); //一定要“...”之前的那个参数 /****** Step 2 ******/ //此时ap指向第一个可变参数 //调用va_arg取得里面原创 2008-08-27 16:40:00 · 733 阅读 · 0 评论 -
小心宏定义出错
当宏参数在宏定义中出现超过一次,这个宏作用在复杂的表达式里就可能出错,导致不可预料的结果,我还记得我有一次为这个问题导致的出错,查了一个星期,最后整整debug了一个工作日才找到这个问题,所以提醒大家一定要小心。 比如 #define MAX(a, b) ( (a) > (b) ? (a) : (b) ) #def原创 2008-08-27 17:16:00 · 1180 阅读 · 1 评论 -
嵌入式程序员应知道的基本问题-C语言(zz)
来源:21ICbbs 作者:lhf C语言测试:想成为嵌入式程序员应知道的0x10个基本问题 其中少量灰色的文字是我添加的,表达一些我的看法,很不成熟,希望朋友们指正。 C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。转载 2008-08-29 10:23:00 · 786 阅读 · 1 评论 -
警惕递归
警惕递归 递归是一种解决复杂问题的有效算法,函数通过简化问题求解过程,将被简化的问题再交给一个或多个与自己完成一样的函数,从而让程序解决这个问题。比如说汉诺塔问题。 递归算法思路清晰,编成代码简单优美,缺点是会消耗不少的栈空间,甚至有时候会带来额外的开销。递归所对应的另一种算法是迭代(也就是循环),相应的,迭代的优点是效率高,但是程序可读性方面没有递归好。大部分递归都可以方便的用迭原创 2008-09-10 16:26:00 · 724 阅读 · 0 评论 -
字符串处理函数C语言实现(一)
包含以下函数: //字符串查找将在下篇文章详细说明size_t lm_strlen(const char *str);size_t lm_strlen2(const char *str);char * lm_strcpy(char *dest, const char *src);char * lm_strncpy(char *dest, const char *src, size_t n);c原创 2008-10-08 13:41:00 · 877 阅读 · 0 评论 -
VC里让输出窗口暂停
通常我们会用用vc新建一个win32 console(控制台) 工程来进行一些简单的C++语法调试, 但是这样的工程按F5运行的话,command(输出)窗口会一闪而过,无法看到输出 这时候我们有2种办发来解决它。 1, ctrl+F5 运行,但是老容易鼠标按成直接启动 2,main 函数最后加一条语句,这样按F5运行也OK了。原创 2009-02-18 13:32:00 · 3432 阅读 · 1 评论 -
字符串处理函数C语言实现(二)
包含以下函数:char * lm_strchr(const char *str, char c);char * lm_strstr(const char *s1, const char *s2);char * lm_strstr2(const char *s1, const char *s2);char * lm_strchr(const char *str, char c){ do{原创 2008-12-08 15:05:00 · 888 阅读 · 0 评论 -
用批处理编译VC2008工程
该批处理的初衷是为了让公司非程序员可以不通过VC工程,直接运行批处理文件而编译运行程序。 一,其实很简单,首先需要安装VC,没有正式版,安装免费的Express版本也行。 然后写个批处理,内容如下。 REM VC目录中2008是9.0,2005是8,其他的自己到C:/Program Files去找下VC安装路径 CALL "C:/Program Fil原创 2009-09-18 14:14:00 · 4905 阅读 · 3 评论 -
VC内存泄露检查工具:Visual Leak Detector
www.diybl.com 时间:2009-04-12 作者:匿名 编辑:sky 初识Visual Leak Detector 灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题。当程序越来越复杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题。内存泄漏是最常见的内存问题之一。内存泄漏如果不是很严重,在短时间内对程序不会有太大的影转载 2009-10-29 14:59:00 · 850 阅读 · 0 评论 -
ifstream 与ofstream用法——转
fstream 与ofstreamofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:1、插入器( 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,co原创 2009-10-29 15:59:00 · 781 阅读 · 0 评论 -
警惕引用,血的教训
引用和指针到底该啥时候用哪一个,一直是各有利弊的问题,不过这次我是被引用郁闷死了。 足足花了我一天时间,都没找出bug出在哪里,最后没办法,请同事帮忙看终于搞定了,原来是个引用的用法问题。 正常代码如下: UserSetting& user = g_Setting.User(); User()函数返回的是一个引用,这样直接用原创 2009-12-05 16:07:00 · 604 阅读 · 1 评论 -
const 在C/C++里面的用途
11.1 使用const提高函数的健壮性看到const关键字,C++程序员首先想到的可能是const常量。这可不是良好的条件反射。如果只知道用const定义常量,那么相当于把火药仅用于制作鞭炮。const更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const是constant的缩写,“恒定不变”的意思。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健转载 2011-07-04 10:44:54 · 872 阅读 · 0 评论 -
Warning This file includes at least one deprecated or antiquated header
我是在IOS上用GDB编译,也是包如下错误,参考这边文章以后就OK了把我得#include "deque.h" 改成#include , warning消失以下为转载内容:版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://jadue.blogbus.com/logs/31168910.html用DEV-C+转载 2012-06-04 16:36:35 · 7717 阅读 · 0 评论 -
const_iterator 与 const iterator
const_iterator 与 const iteratorconst_iterator:C++为每种容器类型定义了一种名为const_iterator的类型,该类型只能用于读取容器内的元素,但不能改变其值。对const_iterator类型解引用,得到的是一个指向const对象的引用。 for (vector::const_iterator iter = text.begin();原创 2008-08-07 16:51:00 · 5644 阅读 · 3 评论 -
VS2005无法进行DEBUG:Binary was not build with debug information.
Its not an installation issue, the problem is, as the error message suggests, that you have not built your project with debug information.To do this:1) Goto Project->Properties2) Make sure "Configura原创 2008-07-18 16:25:00 · 3928 阅读 · 1 评论 -
关于VC中的"stdafx.h"
Windows和MFC的include文件都非常大,即使有一个快速的处理程序,编译程序也要花费相当长的时间来完成工作。由于每个.CPP文件都包含相同的include文件,为每个.CPP文件都重复处理这些文件就显得很傻了。 为避免这种浪费,AppWizard和VisualC++编译程序一起进行工作,如下所示: ◎AppWizard建立了文件stdafx.h,该文件包含了所有当前工程原创 2006-05-19 17:32:00 · 1976 阅读 · 2 评论 -
C++中二维数组new小结
二维数组new小结 转自水木清华1. A (*ga)[n] = new A[m][n]; ... delete []ga;缺点:n必须是已知优点:调用直观,连续储存,程序简洁(经过测试,析构函数能正确调用)2. A** ga = new A*[m]; for(int i = 0; i ga[i] = new A[n]; ... for(int原创 2006-10-09 15:17:00 · 1772 阅读 · 0 评论 -
学习C++的建议(Suggestions for learning C++)
学习C++的建议(Suggestions for learning C++)——From:The C++ Programming Language一、给C程序员的建议Suggestions for C Programmers[1] Macros are almost never necessary in C++. Use c o n s t or e n u m to de原创 2007-03-01 16:32:00 · 1214 阅读 · 0 评论 -
常量和指针(Pointers and Constants)
常量和指针(Pointers and Constants)——const 修饰的指针解惑 一般遇到用const修饰的常量涉及到指针就会比较麻烦,容易把头搞晕,有个简单的技巧就是从右向左看,下面我举例子说明: const int* p1 = NULL; //写法一 int const* p2 = NULL; //写法二 int *cons原创 2007-03-06 16:56:00 · 858 阅读 · 0 评论 -
引用(References)
引用(References)引用指 一个对象的另一个名字,他的地址和原对象是一样的。引用主要被用来表示函数的参数和返回值,特别是为了运算符的重载。下面用代码说明引用的基本概念:void referencesTest(){ int a = 0; int& b = a; cout cout b++;原创 2007-03-06 17:37:00 · 1228 阅读 · 0 评论 -
指针数组等基础
话说昨天我读C++ Primer的时候,遇到句话不理解,void putValues( int (&arr)[10] );,然我疑惑了好一会,然后就跑CSDN上去提问(貌似高手回贴速度很快的), 虽然很多热心的大虾帮我解释,我还是迷迷糊糊的,今天结贴给分的时候都还郁闷着呢。 直到我实在受不了了,翻开老谭的书看看,有int *p[10],这样的写法,我才豁然原创 2007-03-18 11:49:00 · 1108 阅读 · 0 评论 -
模板函数
模板函数的定义,和模板类几乎是一样的语法,不过函数自然比类简单,呵呵。格式如下:template // template 是一样的效果Type min( Type a, Type b ) { // Type 被称为模板类型参数return a }就可以使用 min(a,原创 2007-03-19 18:02:00 · 1097 阅读 · 0 评论 -
Explicit Constructors(显式构造函数)
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // 用C风格的字符串p作为初始化值//…}String s1 = “hello”; //OK 隐式转换,等价于String s1 = String(“hello”);原创 2007-03-14 10:16:00 · 7274 阅读 · 4 评论 -
定位操作符new()的理解
class Screen {public:void *operator new( size_t );void *operator new( size_t, Screen* );// ...};额外的参数可以被new 表达式中指定的定位实参初始化例如void func( Screen *start ) {Screen *ps = new (start) Screen;// ...}“new (s原创 2007-03-23 09:23:00 · 1440 阅读 · 0 评论 -
C++构造函数调用顺序
1、如果类里面有成员类,成员类的构造函数优先被调用;2、创建派生类的对象,基类的构造函数函数优先被调用(也优先于派生类里的成员类);3、 基类构造函数如果有多个基类则构造函数的调用顺序是某类在类派生表中出现的顺序而不是它们在成员初始化表中的顺序;4、成员类对象构造函数如果有多个成员类对象则构造函数的调用顺序是对象在类中被声明的顺序而不是它们出现在成员初始化表中的顺序;5、派生类构造原创 2007-03-30 16:48:00 · 5130 阅读 · 3 评论 -
避免遮掩继承而来的名称
public: virtual void mf1() = 0; virtual void mf1(int); virtual void mf2(); void mf3(); void mf3(double); ...};class Derived: public Base {public: virtual void mf1(); void mf3(); voi原创 2007-05-16 19:11:00 · 823 阅读 · 0 评论 -
sprintf详解
sprintf详解 转摘声明:选自《CSDN 社区电子杂志——C/C++杂志》在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望。由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出。这也导致sprintf 比printf 有用得多。sprintf 是个变参函数,定义如下:int原创 2008-07-10 17:28:00 · 864 阅读 · 0 评论 -
static 在C/C++中用法
static大概用法 1. 在函数中定义局部变量:在变量被存储在静态存储去,下次调用该函数时变量值保持不变 2. 定义函数和全局变量:作用域仅在该文件中,防止和其他文件中同名函数/变量产生冲突 In C++ 3. 类成员变量:类共享数据成员,无论创建多少个类的对象,该变量在程序中只有一份,而且是全局性的。注意:必须在类定义体的外部定义(正好一次),通常和类成员函数原创 2008-07-23 15:01:00 · 720 阅读 · 0 评论 -
一个Sqrt函数引发的血案
一个Sqrt函数引发的血案2010-10-06 17:13 by 码农1946, 38747 阅读, 51 评论, 收藏, 编辑源码下载地址:http://diducoder.com/sotry-about-sqrt.html好吧,我承认我标题党了,不过既然你来了,就认真看下去吧,保证你有收获。我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么转载 2013-10-13 16:19:58 · 2027 阅读 · 0 评论