metro网站模板,0735郴州网,网站广告图怎么做,云南省住房和城乡建设厅勘察设计处网站摘要#xff1a;编译器是将程序语言编译成机器语言的一种高级程序。如今许多编译器越发智能#xff0c;在编译不通过的情况#xff0c;你的代码甚至都无法运行#xff0c;那么到底是编译的问题还是您的代码问题呢#xff1f; 许多程序员喜欢抱怨编译器报出的各做错误…摘要编译器是将程序语言编译成机器语言的一种高级程序。如今许多编译器越发智能在编译不通过的情况你的代码甚至都无法运行那么到底是编译的问题还是您的代码问题呢 许多程序员喜欢抱怨编译器报出的各做错误难道真的是编译器问题吗下面就让我们来谈谈吧
你确定吗
当程序员告诉你编译器会产生错误请问你会信吗99%的情况下你会把它当作一个谎言或者是笑话甚至在内心会嘲笑这个程序员。
通常编译报的错主要有以下几种
数组溢出变量没有初始化输出错误同步错误非法使用变量调用未定义方法或其它等等
对编译器报出的这些错误你是否早已如数家珍但这并没有阻止程序员一次次对编译器的指责与抱怨。似乎这一切都是编译器的错
编译器也可能包含错误但是这种机率真的很小除非你使用一些稀奇古怪的编译器。在我多年使用Visual C的职业生涯中我只看到一次汇编代码生成错误。
建议
当你在开始抱怨前首先检查一下自己的代码是否有错并且已更正其次最好看看别的程序员是如何评价这个错误的。
目的
先奉上一段编译代码供大家娱乐一下
TprintPrefs::TprintPrefs(IffdshowBase *Ideci, const TfontSettings *IfontSettings) { memset(this, 0, sizeof(this)); // This doesnt seem to // help after optimization. dx dy 0; isOSD false; xpos ypos 0; align 0; linespacing 0; sizeDx 0; sizeDy 0; ... }
我可以想象程序员看到这段注释会有多愤怒多令人讨厌的编译器在调试版本阶段所有变量都被赋0值。由于优化问题在发布版本中会包含一些垃圾。面对这种情况最好的解决之道便是检查代码而作为程序员你还需继续编写代码用勇气战胜邪恶
下面让我们来分析上面这段代码你发现没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)); }
从注释中可以明白这段代码试图从其他方法中拷贝内存。然而编写这段代码的程序员试图丢弃使用memcpy()方法。当程序员想要复制的结构体正好是8字节的时候在64位系统里面正好可以运行。 通过上面的分析大家可以明白抱怨与指责编译器制造商是无法解决任何问题的只会浪费时间无法静下心继续编写代码。还是好好
检查一下你们自己的代码吧此外工具是死的人是活的程序员们你们才是
工具的主人