编译器躺着也中枪

很多程序员喜欢指出编译器这样那样的问题,让我们来谈谈这个话题。

当程序员说,这是编译器导致的错误,可以告诉你,99%的情况下是他在撒谎。你会发现以下问题:
1.数组溢出
2.变量未初始化
3.打印错误
4.多线程的同步问题
5.非volatile变量
6.代码导致未定义的错误
等等

许多人知道这些问题,但就是不停的怪罪编译器。编译器当然也有可能包含错误,但这个概率非常低。用了多年的VC++
,只碰到过一次它产生不正确的汇编代码。

一个建议

在开始指责编译器之前,认真全面的检查你的代码,尽快消除你代码的错误,这样也不会因为一个低级问题被其他程序员取笑。

这里是ffdshow的一个项目片段

TprintPrefs::TprintPrefs(IffdshowBase *Ideci,
const TfontSettings *IfontSettings)
{
memset(this, 0, sizeof(this)); // 这语句在优化之后看起来没用

dx = dy = 0;
isOSD = false;
xpos = ypos = 0;
align = 0;
linespacing = 0;
sizeDx = 0;
sizeDy = 0;

}

在Debug版本里面所有的变量都是0。在Release版本里面因为错误的优化导致垃圾的出现,我隐约可以听到程序员在骂这个破编译器。

骂完编译器之后,程序员给每个类的成员变量一一赋值。勇气还是战胜了邪恶势力。他/她用他的方法解决了这个问题。

我需要解释的是,memset()函数在这种情况下不起作用的原因是:第三个参数传进去了指针的大小,并非结构体的大小,应该memset(this, 0, sizeof(*this))。

顺便提到的是,是不是memcpy()经常会不奏效。我敢肯定,程序员又在骂编译器是低智商。

void Assign(const AVSValue* src, bool init) {
if (src->IsClip() && src->clip)
src->clip->AddRef();
if (!init && IsClip() && clip)
clip->Release();
// make sure this copies the whole struct!
//((__int32*)this)[0] = ((__int32*)src)[0];
//((__int32*)this)[1] = ((__int32*)src)[1];
memcpy(this,src,sizeof(this));
}

从内容里可以看出,程序员想要复制内存。当程序员想要复制的结构体正好是8字节的时候,在64位系统里面正好可以运行。

依然还是,sizeof(*this)。

结论:出现错误,还是排查你的代码吧。

 

文章来源:大爱数据

[多图]详解 Firefox 17 开发者工具的改进

随着每一个版本的火狐更新,开发者工具也会随之增强,蚊仔也每次都会更新相应的改进内容。这次我们来看看Firefox17给开发者带来了哪些新的便利(顺便提一句蚊仔盼望的随意修改复制HTML代码来了=w=)。

 

HTML编辑

在Firefox的开发者工具中,元素查看器应该是最重要的工具了。利用查看器中的“样式”面板,你可以很容易地操作页面上的样式。但你有时需要操纵DOM的页面的话,新的“标记面板”可以让你做到这一点。


新的标记面板

标记面板的快捷键还是原来的Alt+M(Mac上按Ctrl+M),或者鼠标点击上图中第三个按钮。(说白了就是标准的Html代码面板)

以前的话,你通过点击选择“标记面板“的元素“可以查看”样式面板“中的css样式。也可以右键单击标记面板中的某一元素,进行一些便捷操作(快速复制、删除HTML节点)。(如图)

那么Firefox 17的“标记面板”有什么新的改变呢?在此之前,你只能可以双击属性值更改该值。现在,你可以在几乎任何地方双击,进行任何修改。比如双击来改变文本的内 容。同样,对于标签本身也可以修改,比如双击关闭的标签“>”之前的空间,你可以添加新的属性。

你还会发现新版中,可以使用Tab键和方向键在标签和节点之间移动。键盘导航可以是编辑DOM的工作跟快捷。

Web控制台

一个小改进,就是用于网页的放大、缩小功能,现在在Web控制台中也同样适用了。鼠标选中控制台后,是哦也能够快捷键CTRL++CTRL+-CTRL+0重置(Windows / Linux),CMD++CMD+-CMD+0(Mac)。

注:Web控制台还有一些改进,因为有点难翻译,详细看这里

元素查看器视觉效果改变

在元素查看器里选中元素的视觉效果做了修改。

在目前的版本中,选择元素的视觉效果是,背景变为暗色,以突出选择部分。(如图)

在Firefox17后,背景不会发生变化,而是给选中部分加上一个虚线边框。这样的好处不会影响Web整体的设计感觉,对Web设计者来说是一个不错的改进。(如图)

调试器的改进

1、快速跨脚本搜索。在调试器的搜索框中输入“!”+“要搜索的内容”,可以快速的跨脚本搜索所有相关的脚本内容。(如图)

2、得到更多查看空间。如果你想要更多的空间来看看你的代码,在左侧增加了一个新的工具栏按钮(上图第二个按钮),点击后将关闭两个侧面板,让你的代码得到整个宽度的空间。

3、新增了更多的键盘快捷键。让使用调试器比以往任何时候都便捷、更快:

  • ALT+SHIFT+P(Windows),CTRL+SHIFT+P(Mac)焦点定位到搜索框
  • ALT+SHIFT+T(Windows),CTRL+SHIFT+T(Mac)字符串(token)搜索
  • F6 继续
  • F7 跨过
  • F8 进入
  • F8 跳出

注:在Firefox15中“在页面重载后,调试器断点不捕捉的问题(783393);”的问题在Firefox16中已经被修复

另外随便说一句15开始Android版“干脆面”也开始好用了。下面这张图太萌了=w=

 文/蚊仔部屋

阿里巴巴首席战略官:阿里云要当中国Android

【搜狐IT消息】北京时间9月10日消息,阿里巴巴首席战略官曾鸣表示,阿里巴巴认为去年推出的阿里云手机操作系统,今年来自手机制造商的需求会更强劲。

阿里巴巴预期到今年底,采用阿里云系统的手机商会达到5家,目前只有2家。目前,只有天语、海尔使用阿里云系统。曾明说:“我们想成为中国的Android,我们有相当多的新合伙伴在排队。”他拒绝透露手机商名字。

与苹果iOS和Android不同,这两个系统的软件装在设备中,阿里云系统软件是装在远程服务器上的,程序是网络式的。系统还装有自有地图、电子邮件程序。

曾明说:“如果我是手机制造商,而唯一的选择是Andorid,我会相当害怕。任何企业都喜欢至少有两家供应商。”

大约三年前,阿里巴巴开始开发阿里云操作系统,2011年7月发布。阿里巴巴称参与项目的有1600名工程师。

曾鸣认为Android在中国面临挑战是因为Google搜索、Google地图、Gmail功能存在限制。在中国市场,Android无法提 供很好的用户体验,但阿里巴巴可以。不过,一些手机商认为,对任何移动操作系统来说,要替代Android都不容易,即使是Windows Phone也不例外。Android已经建立强大的生态系统,有手机制造商,也有程序开发者。

中兴通讯手机业务主管罗忠生最近就表示,Android预期会继续占主导,因为其它软件平台发展新程序生态系统要花很长时间。他说:“目前没有人可以挑战Andorid。”

曾鸣深知阿里云要花时间成为主要智能手机操作系统。不过阿里巴巴依然怀有希望,会继续在此业务上下赌注。曾鸣说,阿里云的优势在于:整合了支付服务,移动交易更安全,更容易。

曾鸣解释说,阿里巴巴之所以开发自己的移动操作系统,部分是因为在线购物会由PC向移动设备转移,有了阿里云可以为购物网带来移动交易。曾鸣说:“在目前的中国经济中,电子商务是少有的亮点之一。”他预期淘宝、天猫今年交易额会达1万亿元,2010年为4000亿元。

曾鸣还说,中国许多产业正在减速,但电子商务没有。在线购物继续快速增长,市场竞争会更激烈,因为许多企业越来越专注电子商务,寻求增长。

笔记本电脑的发明者 Moggridge 去世,享年69岁

“Bill Moggridge,这位伦敦出生,创造第一台笔记本电脑的工业设计师,在与癌症的斗争中于星期六去世,享年69岁。Moggridge作为GRiD Compass的设计师而闻名,这台设备为现代笔记本电脑的设计提供了原型,包括折叠式设计,平板显示和扁平的键盘。Moggridge说1981年他测试这台设备的原型时,他第一次使用电脑。

1262345516JAZiOYEK.jpg

 

GRiD Compass

1262345516eMzCd4uR.jpg

2012年8月中国编程语言排行榜:C++领先

CodeForge最新公布2012年8月“我最喜爱的编程语言”排行榜。此排行榜清楚的反映了各种编程语言在国内和国外不同地区的受欢迎程度。这个排行榜不同于TIOBE的编程语言流行度排行榜。TIOBE的数据来源于搜索引擎等间接途径。而这份排行榜来自8月份对一万七千多名软件工程师的问卷调查。调查选项为单选,每个参与调查者只能选择一个自己最喜欢的编程语言。

最先出场的仍然是来自全国范围的统计情况。国内数据来源于对CodeForge.cn用户的统计。

 

从这个排行榜来看,C字头的C,C++,C#占据了前三甲。其中的C/C++是以绝对的优势排在榜首,是当之无愧的最受全国程序员喜爱的编程语言。Java 位居第四,也颇受欢迎。Matlab因其在数学方面的特长和易用性方面的优势,深受大学生和研究人员的喜爱,也是很多软件工程师验证前期算法的首选工具, 在此次调查中跻身前五名。与上个月的排行榜相比,最新排名中C++和C微降,C#、Java和Matlab增长明显。Objective-C有大幅下降。

再来看一下来自北京,上海和深圳三地被访用户的调查情况。

 

从上面三个图可以看出在北京,上海和深圳三地,各编程语言受喜爱程度有所不同。C++/C在这三个城市中都是最受喜爱的编程语言。与其他两个城市相比,在深圳,Java很受欢迎,而C#受喜爱程度不高。而在上海,C#的受喜爱程度是其在深圳的2倍。Matlab在深圳的受喜爱程度显著低于在北京和上海,这反 映出深圳的研究类人员比例少。与其他两地相比,在北京,适合移动应用类的编程语言Java(for Android, etc.)和Objective-C (for iOS)更受欢迎。

下面是来自CodeForge.com的国外调查者最喜爱的编程语言调查情况。

 

与国内的情况不同,C比C++更受全球的软件工程师喜爱。在IT创新最活跃的美国,C++略胜C,而在软件外包大国印度,C与Java都大受欢迎。其中Matlab高居前列的原因同样是受高校研究人员的追捧。

数据来源:CodeForge.com & Codeforge.cn