'微软的C++编译器,你别这么脆弱…'

前几天写代码的时候,跟往常一样,save, ctrl + shift + B,结果….

1>正在编译…
1>cpd.cpp
1>d:\widgetengine\test\cpd\cpd.cpp(66) : fatal error C1001: 编译器中发生内部错误。
1>(编译器文件“d:\orcas\compiler\utc\src\P2\ehexcept.c”,第 971 行)
1> 要解决此问题,请尝试简化或更改上面所列位置附近的程序。

哎,难道我写的代码很BT么?我觉得不BT啊,语法有错误你可以告诉我么,也不要自杀崩溃么。。。

把vs2008的C++编译器杀死的代码元凶押上来!

typedef struct _keyidmap …

more ...

连载3:从学生到教师

“杨家有女初长成,养在深闺人未识”——紧张的学习生涯

2002 8月,软件学院第一批学生正式上课了。最初的前半个月,每天都一直在上C语言,给我们上课的是计算机系的一个博士,叫马云龙。只记得他给我们布置过三个作业,一个是写一个表达式求值的程序,另外一个是写一个文件分割合并器,还有一个是写一个小型的数据库。那个时候,虽然机房不能上网,但每个晚上机房人都是满满的。大家都是转专业过来的学生,一群杂牌部队,虽然底子不行,但是干劲十足(看看现在我们的机房经常门可罗雀,哎……)。尽管如此,第一个表达式求值程序就把我们所有人都难住了。学过数据结构的同学不要笑,不就是两个栈么,一个放操作符,一个放操作数。可是那时候的我们,谁知道栈是什么啊?那个时候在机房上机,经常能听到“两个栈”,“两个栈”的讨论声。后来唐建锋老师毕业后风尘仆仆来到上海,到学院工作了,他也加入了“两个栈”的讨论中。

后来万老师看我们实在顶不住了,怕我们不堪重负,重压之下会有人产生轻生的念头(记得有女同学还偷偷的在机房角落里面哭鼻子。不过后来这个同学毕业去了北京 …

more ...

侃多核

忽如一夜春风来,在地毯式广告和各大媒体的轰炸之下,PC机和基于PC的Server似乎一夜之间进入了多核时代。谈到双核电脑,四核的服务器也已经飞入了寻常百姓家。
Intel和AMD两大芯片厂商花了巨大的力气来推广多核,不能不说有市场利益在驱动。说为什么要多核,当然可以说出一大堆理由:提高效率,降低功耗,半导体技术发展到极限了,甚至还有一个理由叫什么世界本来就是并行的……这里就不多说了,这篇文章主要想说说我自己觉得多核可能会对程序员带来的影响。
在此之前,想先说说多核跟摩尔定律的关系,摩尔同志最早关于摩尔定律的表述是这样的:the number of transistors on a chip doubles about every two years. 所以,最初的摩尔定律其实跟处理器速度没什么关系,只是说处理器上的transistors晶体管数量会翻番。后来的一些年里由于计算机主频速度不断加快,所以摩尔定律就被演绎处理器“主频速度18个月翻一番”的版本。现在呢?计算机的主频速度又上不去了,尤其是笔记本电脑处理器,我2001年买的本子是1G的处理器,如果摩尔定律应验,那现在笔记本处理器速度至少也要8G了,当然这没有变为现实。就在所有人都在疑问摩尔定律会走多远的时候,多核出现了。支持摩尔定律的同志们高兴了,摩尔定律又可以有新的演绎了:处理器核的数量18月或24个月翻一番。虽然core不是transistor …
more ...

最近比较烦

最近比较烦,
好多事情都等着我干,
Blog变得荒无人烟,
自己也被忙得团团转。
天上的卫星要用Ada编程,C++它玩不转。
Ada对用户不友好,我用eclipse给它写插件。
机密信息不能说,否则国家安全局来找我把帐算。
微软出了CE6,我把某BSP给它往CE6上搬。
遇到麻烦一大串,
一来结构变化大,二来以前那个BSP写的也烂。
微软的两个科研项目挺扯蛋,
简单无聊又麻烦。
但是拿了别人的钱就要把事情干。
预料之中的通过了毕业答辩,
知道了5个答辩老师,4个是为了那顿饭,
也知道了中国的学术是多么的混蛋。
答应了别人维护Windows Embedded.com.cn的网站。
却抽不出时间来把asp代码看。
服务器架在美国,海底光缆你怎么还不断。
以前做外快赚点小钱,
没想到成了某公司的技术骨干。
后续维护、版本升级全要我来看。
微软的CE6讲师基本上是炒冷饭。
华为UT都来听我扯谈。
讲得多了觉得鸡肋的还真是不一般。
看看年龄也马上奔三。
父母长辈都催着我把婚完。
80年代的典型问题:“没有房子,爱情该咋办?”
麻烦,麻烦……
more ...

微软Windows CE TTT 6.0印象记(2)

  <div>
  </div>

  <div>
    6日,是培训的第二天,培训进入正轨了。上课的内容依然轻松。讲了Windows CE的内核体系结构,只有进程线程模型是变化最大的东西。Windows CE老的32 x 32的限制已经不复存在了。新的进程模型几乎可以容纳无穷多个进程。微软说是32000个,其实这个只是理论值,因为Handle table有64K大,每个进程最少也要占据2个handle,所以就算出来一个32k个进程。其实这么多进程,也只有理论上的意义了。随着进程模型变化的是虚拟内存模型,现在每个进程都有了自己的1GB可用私有空间,剩下3GB是一样的。但是无论如何,进程地址空间立体起来了,也由此引发了更多的变化。以后可能我会写专门的文章来阐述把,这里点到即止。其他的调度算法什么的基本没变。
  </div>

  <div>

  </div>

  <div>
    晚上去了我陆大伯家,陆大伯是我爸爸的好友,我爸爸年轻的时候整天去广东出差跑业务,认识了陆大伯,他跟我爸可是几十年的老交情,当年我高考的时候,我爸爸就一直想让我考中山大学,这样在广东还有个熟人可以依靠,后来还是没有去广东。我从上海机场买了无锡排骨,苏州豆腐干和上海点心,带过来给大伯,然后又在地摊上买了一些水果。打车不是很远就到了他家 …
more ...

makefile入门

1 makefile入门

Windows CE的构建系统大量使用了Nmake工具和makfile。在大多数微软的软件和驱动开发包中都会包含Nmake工具。因此,这里有必要介绍一下makefile和Nmake工具。

1.1 makefile简介

对于许多Windows下的程序员来说,makefile可能还是个陌生的名词。因为Windows下的许多集成开发环境(例如:Microsoft Visual Studio和Borland C++ Builder等)可以帮助开发人员完成makefile需要完成的功能。通常只需要在集成开发环境中按个按钮,工具就可自动帮助我们编译、链接整个项目。想象如果没有了集成开发环境,那么就需要有另外一种方式来管理对项目的构建。

简单的来说,makefile负责帮助开发人员简化代码的编译、链接等构建工作。对于只包含几个文件的简单的项目,开发人员完全可以通过手动控制编译器、链接器来完成对项目的构建。但是想象一下对于一个拥有几百个、甚至几千个文件的大型项目,如果每次构建都是通过手动完成,那消耗的工作量和复杂程度是不可想象的。在这种情况下,makefile就有了它的用武之地。

makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个自动化脚本一样,其中也可以执行操作系统的命令。

makefile带来的最大的好处是 …

more ...

NDS程序设计(一)

NDS程序设计

引子:

对程序员来说,这又是一个吓人和诱人的题目,但是本文基本上还是以小品文为主,想到哪里写到哪里,没有规划。基本属于自娱自乐。

如果有人想通过这个文章学习NDS编程呢,最好具有一些coding的经验,至少要学过C语言,知道一些先编译后链接、循环语句、选择语句什么的。如果一点都没有Coding的经验,还是放弃在NDS上编程吧。当然,进阶的要求就更多了,大概有如下一些:ARM体系结构、C / C++、GNU工具的使用经验。

很早就有个想法,等我的那本书完稿之后要买个掌机玩玩,被这本书折腾了一年,像块石头一样一直压在胸口喘不过气,现在基本上都已经完稿了,也可以兑现对自己的承诺了。

现在流行的掌机有两个:任天堂的NDS(以及后来的NDS Lite)还有索尼的PSP。具体技术细节不说了,大概就是NDS性能弱一些,但是好玩的游戏多(插一句:CPU是ARM)。PSP功能强大(又插一句:CPU是MIPS),但是好玩的游戏没几个。经过反复权衡折腾,最后我选择了买NDSL,上周全套装备配齐,2300大洋。包括NDSL机子,Super Card烧录卡 …

more ...

无数个何宗键,好一个夜张江

以前曾经看到过姚明GGä¸ºä¸Šæµ·æ‹çš„ä¸€ä¸ªä¸»é¢˜å¹¿å‘Šï¼Œå§šæ˜Žä¸€äººæ‰®æ¼”å…¬å¸è€æ¿ã€é«˜å°”å¤«çƒæ‰‹ã€å…¬äº¤å¸æœºâ€¦â€¦å¾ˆå¤šè§’è‰²ï¼Œç„¶å …

more ...

'签名备份[转]'

看到某人的签名,觉得挺好玩,留个备份在自己的blog上。

肯定是出自程序员之手了,呵呵。程序员真是绝顶聪明又可爱的人。

因公司业绩不好,本人已下岗,现欲开辟第二职业,有意者请来电来函洽谈咨询。本人承接以下业务:苦力搬运,装卸,车工,钳工,焊工,水电工,瓦工,砸墙,砌墙,筛沙,油漆,通下水道,贴瓷砖,室内装璜,Vb,C++,.NET,C#,Java,j2ee,j2me,php,asp,delphi,汇编,PC&手机游戏开发,网络维护管理,三维建模,照片上色,平面设计,建筑效果图,flash动画,硬件设计,单片机开发,四六级替考,办证,黑枪,黑车 …

more ...

int i与共产主义

int i与共产主义有啥关系?

没有关系?那说明你coding还没到境界,coding就是生活,从coding中能体验到生活,从生活中又可以悟出coding,这才叫境界。

看看大侠陈榕榕怎么说,email节选:

From: xxx

〉请大家定义循环变量时尽量在函数前定义,因为类似这样的定义:
〉for (int i = 0; i < 10; i++) …
〉以于i变量的作用域,gnu编译器认为是for语句里,msvc认为是直到函数末尾。(msvc好像不太对)
〉所以建议抽出来,放到函数最前面单独定义。

C++的发展历史上,1983年,C++曾经是一个翻译器,就像CAR编译器曾经是一个翻译器。C++翻译成C,然后用C编译器编译,发表的文章是“C++ as a Better C”。参数声明在引用之前,不一定在函数最前面,作用域一直延续到最后。翻译的时候把这些定义提到前面去。for()里面的int i也同样处理了,为了方便吧 …

more ...