编程开发
本博客所有文字均为原创
转摘请注明出处并给出原文链接
联系方式:ibolow@gmail.com|饭否|豆瓣|Twitter:@JoyLoft


招聘广告

一家南京日企,嗯,也就是我的组,招聘一名两年以上工作经验的C++软件工程师。

我的要求如下:

    • 熟悉Linux下标准C++开发以及C++标准
    • 至少掌握一种脚本语言
    • 对瀑布模型和测试理论有一定认识
    • 对新技术有一定关注度
    • 能够并且善于独立思考
    • 有编译相关工作经验者优先
    • 英语六级或者日语三级优先

以上招聘,有效期10天。

假如您不满足以上条件,我肯定不会录用。但是假如您想试试我们公司的其他机会,我可以帮忙推荐。

模板编译的改进

最近在做c++0x标准的编译器升级,又遇到了之前做vc2005编译器的对应的时候就遇到的一个难题:

当模板存在嵌套的时候,比如A<<B<> > c,最后的两个”> >”中间需要加一个空格,不然会被误识别成运算符“>>”。

在0x标准,或者更老的Vc2005的编译器中其实允许删除个空格了,参见以下这个变态例子:

A<B<2>>1>> c; 编译器可以智能的识别右移或者是两个模板右括号的连写。别看只是一个小小的空格,其实在编译器领域是一个很难的问题,因为模板的实现太复杂了。

我两年前费了好大的力气都没做起来。后来和Eclipse CDT的一个Committer聊天说CDT实现了这个功能,哇呀呀气死我了~只要有人能实现,我们就一定也可以。机缘巧合,三年之后,我又回到了这个项目,又回到了这个问题。花了一下午,结果解决了…开心。

另外,在对应的过程中,看到了自己好几年前写的注释,和当年实现的过程中注释掉的大段代码,还保持着原样,真有感触。

VC与GCC兼容性问题一则

对于c中i++的操作大家都能明白是什么意思?就是先用了值再加1呗。

其实这里面学问挺大,甚至两大编译器vc2005和gcc3的表现会产生不一样,也就是我们所说的编译器兼容性问题。

看下面的例子:

  1. int main(void)
  2. {
  3. int j=0;i=1;
  4. j=i+=1?i++:0;
  5. return 0;
  6. }

上述的代码在vc和gcc中输出是不一样的。产生差异的原因在于对i++的更新时机处理不一样。

对于vc来说,出了“?:”三目表达式,i的值就立马被更新了,

但是对于gcc来说,要出了分号才被更新。

手机版的Javascript engine来了

这年头牛人越来越多了。一个nokia的牛人,没事瞎捣鼓捣鼓,就把javascript一直到了J2me平台了。

大家点这里可以预览试用一番。

哼,气死人家了。我决定更上一层楼,把j2me移植到javascipt平台上去。哟西~

递归的进行grep

1.以前用grep命令,有一点很麻烦。就是假如想递归的进行grep的时候,不能使用文件通配符。比如

grep -R?asdf *.cc

这样的命令是不行的,假如cc文件都在子目录中,而当前目录下一个都没有的话,便会提示找不到文件。于是只能这样

grep -R?asdf *

在一大堆结果中找啊找啊。

2.今天我终于受不了了,下了grep的代码打算改掉这个问题。看了五分钟我忽然想到,通配符的处理是shell来展开的,所以grep根本没办法自己来递归的过滤出*.cc,它甚至连*都看不到。

这时就想到,就算可以修改,也不该修改,因为这样破坏了linux的美。正确的用法应该这样。

find . -name *.cc | xargs grep asdf

3 每个命令只做一件事情,并且做好它。每个人只专注于一个方向,并且深入它。

如何用gccxml直接编译Symbian c++

1.

最简单的方法,就是常规的方法

bldmake bldfiles

abld build gccxml udeb

2.

有些人不喜欢用包装好的工具,喜欢直接写命令,比如我。研究了一下,参考以下命令行

T:\Test\group>gccxml_cc1plus -bi -g -D__SYMBIAN32__ -D__GCC32__ -D__EPOC32__ -D__MARM__ -D__MINGW32__ -D_STLP_LITTLE_ENDIAN -D__GCCXML__ -D__MARM_ARM4
__ -D__EXE__ -D_DEBUG -D_UNICODE -nostdinc -Wall -Wno-ctor-dtor-privacy -Wno-unknown-pragmas -UWIN32 -fshort-wchar -quiet -w -I “\Test\inc” -I- -I ”
\epoc32\include” -I “\epoc32\include\variant” -include “\epoc32\include\variant\Symbian_OS.hrh” ..\src\Test.cpp

3.其实你也可以根据以上的命令改巴改巴,直接编dll或者exe了。基本思路和上面的类似

蒙混过关

一哥们去面试c++,发生了如下一段对话

面试官:你给我解释下晚绑定是怎么回事吗?

某人:您是说静态链接动态链接吗?

面试官:恩?那是什么东东?

某人:就是晚绑定。(其实不是)

面试官:原来如此…

于是这道题目就华丽丽的混过去了。

便宜的sharp科学计算器

在淘宝上花18块钱买了个夏普EL-W535的科学计算器。周六才有空把照片拍出来。计算器这种玩意没什么好描述的,都支持什么计算看图就成。(点击放大)。请特别注意屏幕上的公式哦,和我们书写的效果是一样的。我就是看中了这一点。

这个计算器是中国造的,但是并没有在中国上市,因而没有中文说明书。英文说明书请点这里

Symbian的编码风格叫什么

Symbian C++的编码缩进风格很怪异,很少看到这么用的。忽然兴起打算修改astyle,让他支持symbian的缩进风格。结果更新到最新的版本一看,原来已经支持了。

顺便还学会了个新的知识点,这种风格的名字叫做WhiteSmiths

windows平台下如何用Python杀进程

这段代码来自于一个很简单的场景:在python中调一个程序。给这个程序设置一个timeout,假如一段时间程序还没有返回,就杀掉这个这个新开的进程。本来以为我肯定不是第一个遇到这个问题的人,但是网上搜了好久都没找到完整的办法,自己搞了一个。一些定义来自于这里

下载例程

This python project will show you how to terminate a process with its child process (and child process’s child process….) all at once by passing a process id under Windows. [download]. Some of the definations in the scripts come from [there]