2012-07-14 21:24
⁄ 工业·编程
⁄ 共 929字
typedef是相当于重新定义一种类型,而define仅仅是简单的字符串替换.常用的陷阱是使用define来使用多个变量的替换,容易出错。
举个例子:
1.#define int * PINTA
2.typedef int * PINTB
使用上边的两种例子来定义两个变量
3.PINTA a,b;
4.PINTB c,d;
第3行中其实a的类型是int *,而b的类型是int,解释一下:在看到define的时候只要把define指定的内容按照原来的情况直接复制下来看结果...
c++阅读全文
2012-07-14 21:19
⁄ 工业·编程
⁄ 共 501字
先看一个例子:
typedef int (*pFun)(int a, int b);
pFunp FunTest;
在上边的代码中,初看会使人误解,怎么能使用函数指针pFun来声明一个类型呢?相信很多人和我都有这样同样的感受。我就先从typedef说起,使用typedef能定义新的类型
比如:
typedef int int_32;
这里int_32就是一个新的类型,虽然这个类型和int是一样的,那我们就可以将ty...
c++阅读全文
2012-07-13 22:53
⁄ 工业·编程
⁄ 共 4741字
概述
在前面的安全编码实践的文章里,我们讨论了GS编译选项和数据执行保护DEP功能。 结论是GS和DEP可以有效的缓解缓存溢出类型的安全漏洞的危害。关于这个结论,有两个大家需要值得注意的地方。
第一:GS和DEP是缓解(mitigation)措施。也就是说,代码本身仍然存在着安全漏洞,只是由于GS和DEP降低了其危害程度。
第二:GS和DEP存在其自身的局限性。例如,GS不是对每一个函数都适用,而DEP则需要一定的硬件支持。
那么,一个...
c++阅读全文
2012-07-13 22:42
⁄ 工业·编程
⁄ 共 3683字
开发环境
–Turbo c
DOS时代c语言开发的经典工具,目前适合两类人使用:c语言beginner(尤其是学生一族),具有怀旧情节的专业人士:)
–Visual C++ 6.0/7.0
稳定而强大的IDE开发环境,具有丰富的调试功能,定制宏的功能也是其一大特色。Microsoft的经典之作,功能强大自不必言说。附带的一些工具也很不错,比如:Spy++。但编译器较之同类,支持c++标准的程度不够好,尤其6.0及以前的版本。
–BCB
Borland的C++ Builder是可...
c++阅读全文
2012-07-13 22:38
⁄ 工业·编程
⁄ 共 452字
在C语言函数使用中函数参数的传递是单值转递,即把实参传递给形参,就是把实参复制一份传给形参。如何证明这一点呢?我想到了一个方法,就是在调用函数和被调用函数都输出实参和形参的地址。如果地址一致那么就是双向传递,如果地址不一致,就是单向传递。
例程如下:
#include <iostream.h>
void Fun(int a,int b)
{
cout<<&a<<endl;
cout<<&b<<endl;
}
int main(void)
{
int a;
int b;...
c++阅读全文
2012-07-13 22:31
⁄ 工业·编程
⁄ 共 413字
也许只有实践才知道自己的C语言基础有多薄弱。今天在VC知识库论坛上问了一个弱弱的问题。
我在一个类里声明: enum { sbf=1024*63 }; char m_cBuffer[sbf]; 然后在构造函数里初始化: m_cBuffer[sbf] = {'/0'}; 编译时出现了这些错误: syntax error : '{' missing ';' before '{' missing ';' before '}' 之后我将这个初始化语句改为memset(m_cBuffer,'/0',sbf);就没有了错误。 为什么不能像...
c++阅读全文
2012-07-13 22:27
⁄ 工业·编程
⁄ 共 4389字
指针是C语言中的精髓。《高质量C++编程指南》的作者林锐就曾说过:不会正确使用指针,肯定算不上是合格的程序员。昨晚我思考了一宿,自认找到了理解指针的正确途径。本文试图通过探究指针和数组的关系去研究指针。
一般的C语言教科书上都会有这样的话:指针就是地址,数组名就是指针的首地址。这些不能不说是错误的,但是却没有深入进去,学生很难有较深的理解。
我认为从本质上看,数组是一个单独的内存块,指针是单独一个内存...
c++阅读全文
2012-07-13 22:21
⁄ 工业·编程
⁄ 共 287字
比如A类有一个成员是B类对象,B类有一个成员是A类指针,该怎样包含头文件呢?如果写互相包含头文件,会出现下面的错误:
error C2143: 语法错误: 缺少“;”(在“*”的前面)
我总结的一个办法是:
正确的做法
在A.h中
#inclue “B.h”
在B.h中B类的定义前面添加这样一句:
Class A;
类的前置声明和包含头文件的区别在于类的前置声明是告诉编译器有这种类型,但是它没有告诉编译器这种类型的大小、成员函数和数据成...
c++阅读全文
2012-07-13 22:08
⁄ 工业·编程
⁄ 共 553字
在公司一个同事问我:"什么时候应该用assert?比如某个函数的输入参数为一个指针,要进行有效计算,该指针必须非空,我弹出一个警告对话框来提示对方不就行了吗?干吗要用assert?我想问的是什么时候用对话框提示用户,什么时候用assert?"
这是一个值得思考的问题。首先明确assert(这里我说的是C++环境下)是需要在调试状态下才能生效的,在发布版是失效的。调试生效的事实告诉我们的是assert的一个重要作用是帮助开...
c++, 软件开发阅读全文
2012-07-13 22:05
⁄ 工业·编程
⁄ 共 1206字
std::string毫无疑问是一个很强大的字符串类,但比起MFC的CString类,也存在一些不足,比如字符串的大小写转换以及格式化字符串。这次我介绍一下std::string大小写转换的两个函数以及格式化std::string的两种做法。
/*! * /brief 将字符串中的大写字母变为小写。 * * /param SrcString [in&out]源字符串。 * /return 无。 */ static void string_ToLower(string &SrcString) { ...
c++, stl阅读全文