标签 : 编译器

VS2010试用+Visual assist下载

Timothy兄的强烈建议下装个VS2010体验一下,一直还用着VS2005和VC6这两个老古董。一直用VC写写小程序,这两个也够用了。但Timothy这么强烈建议应该是不会错,毕竟人家也是专家级的人物。使用初次感觉,启动速度和效果相当不错。对于生成基于MFC的标准对话框程序的可执行文件来看,比VS2005大不少,当然比VC6大更多了。估计不适合做XX类程序,MS不知道在里多加多少附带代码,呵呵。

template static 连接错误LNK1120,LNK2019

我在整理代码时将一组常用函数打包成一个utility类,采用的方案就是静态化成员函数.但是遇到到了Link错误,原以为这个和以前的Link错误一样容易解决(又见link错误之LNK1104,VS2005中郁闷的lnk2001和lnk2019),没想到试了各种办法都失败,仅仅能编译通过,Link时不同的编译器产生不同的错误,VS6产生LNK1120,VS8产生LNK2019.

编译原理知识点概述[11-4修订]

文法

方法是一个数学系统有几个基本成分:基本符号,形成规则,公理,推理规则。

文法G定义为四元组(Vn,VT,P,S)。其中Vn为非终结符号(或语法实体,或变量)集,一般用大写字母表示;

VT为终结符号集,一般用小写字母表示;

P为产生式(也称规则)的集合;Vn,VT和 P是非空有穷集。

S 称作识别符号或开始符号,它是一个非终结符,至少要在一条产生式中作为左部出现。

Vn和VT不含公共的元素,即Vn∩VT=φ

error C2601

现在已经很用VS做东西了,偶尔做做还经常冒出一些问题。而且这一次记住了,下一次还会忘。决定把以后5分钟解决不到我编译错误记下来,时常翻翻。

如果VS冒出这样的一连串的错误,肯定是所指向代码的上方那个地方,包括没有闭合。

error C2601: local function definitions are illegal

堆和栈的区别 (转)

原作者已无法考证,感谢作者。 by Lonkil

堆和栈的区别
一、预备知识—程序的内存分配
一个由c/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 – 程序结束后有系统释放
4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。

字节对齐和C/C++函数调用方式学习总结

前言:
《***软件编程规范》中提到:“在定义结构数据类型时,为了提高系统效率,要注意4字节对齐原则……”。本文解释x86上字节对齐的机制,其他架构读者可自行试验。同时,本文对C/C++的函数调用方式进行了讨论。…