在网上做效果图网站,苏州网站建设极简幕枫,网络营销的工作内容包括哪些,互联网行业最有前景的十大职业sebastian 翻译 关于我第一次程序设计工作的可笑事#xff08;这是很多年以后#xff0c;我在与我的新婚妻子珍妮喝早茶时谈起的。#xff09;是鲍勃如何死皮赖脸地不想离职#xff0c;尽管他根本无法胜任。我记得一个很特别的天气晴朗春天的早晨.... 当时我正在努力地完成…sebastian 翻译关于我第一次程序设计工作的可笑事这是很多年以后我在与我的新婚妻子珍妮喝早茶时谈起的。是鲍勃如何死皮赖脸地不想离职尽管他根本无法胜任。我记得一个很特别的天气晴朗春天的早晨....当时我正在努力地完成一段新代码。这时鲍勃逛到了我的工作隔间依在隔间的墙上喝了一口咖啡。--不我不知道他手上为什么总是有一杯咖啡鲍勃站在那里微笑的说嗨菜鸟。”我漫不经心的说“嗨鲍勃什么事”“这段代码你上周检查过了吗”他耸耸肩“好它破坏了整体结构。编译器说你定义了Output函数两次你不能这样做。”“什么”我诧异的说“但是我肯定我已经生成了……”我快速的把我一周前做的文件调入了编辑器//--- file trans.cpp -----------------------------//static void Output( ostream o ) { /*...*/ }// ...void ProcessTransaction( /*...*/ ){// ...Output( cout );// ...}“这些不是很好吗”我说道坐了回去心里很满意看来鲍勃完全是无中生有。鲍勃笑了笑。“继续看下去。”他催促道。我皱了皱眉用grep扫描了源代码。期望发现Output函数在同一模块中是否还出现在其他什么地方。另人惊讶的是我在另3个文件里发现了它。//--- file output.h ------------------------------void Output( std::ostream );//--- file output.cpp ----------------------------#include output.h// ...void Output( ostream out ) { /*...*/ }//--- file dbinit.cpp ----------------------------//#include output.h// ...void InitDatabase(){// ...Output( clog );// ...}我沉思了一下。“但是这是同一个Output函数吗”我问道。鲍勃不耐烦的用拿着咖啡杯的手比划了一下你刚才没听我说吗我刚才告诉你了你写的代码。无法正常生成。“生成什么”“就在我们的嵌入式目标平台上至少我看到生成器抱怨无法生成。修正它弄完后告诉我一起我可以接下去干。”鲍勃呷了一口咖啡叫了几声然后离开了。好了我老实承认一开始我并不相信鲍勃的话。我试着用我们一直用的编译器重新生成一切正常。我受到鼓舞更换了Shell,用我们用于嵌入式目标的编译器重成生成结果无法生成。我呆了下来喃喃自语我用的第一个编译器允许两个Output函数共存但另外一个编译器却抱怨说存在重复的定义尽管前后两个是同一段代码。我打算放弃了并去向温迪求教时我听到了我身后传来了一阵飒飒的翻书声这时一声合上书的声音从我身后传来“需要帮助吗Guru的声音从我后面传来了“你好像遇到了什么难题了需要我帮忙吗”我转过来看到她在微笑“当然”我很高兴有人来帮我“这是我写的代码这里是编译器反映的错误我到底错在哪里了”她快速的扫视了一遍代码和编译结果。“哦”她说“这里有两个问题但是我们以前已经讨论研究过了这个问题你认为发生了什么事你尽所能解释一下发生了什么。”我接受了挑战“好的对...一个是在trans.cpp中我希望在ProcessTans中调用Output是那个静态版本的Output。”“还有呢”她催促道。“另一方面在dbinit.cpp中我希望在InitDatabase中对Output的调用将会是外部定义的Output,存在于output.cpp。”“但是...”她又催促道。“值得注意的是我们的主要编译器看来同意我的做法否则的话我在代码上交前就应该发现问题。但另一个编译器却不允许这样做。”“做的很好”Guru平静的说“现在沉思一下你所看到的东西你将发现这里的确有两个很明显的问题第一个问题是嵌入式编译器出错了很明显你的的代码是合法的而我们主要使用的编译器确实对这段代码进行了正确的处理。一个函数如果是被声明为static的话仅仅是做内部连接也就是说根据概念3:5第三段的标准来的但是其他的output是进行外部连接的依据概念3:5第九段它和trans.cpp内的静态版本的Output不是同一个函数这就是说为什么嵌入式编译器出错无法正确辨认出两个Output这是两个截然不同的函数而不是一个。”“原来如此”我放心的说“酷这下子我懂了。”“你肯定吗第二个问题是”Guru继续说“尽管你代码是合法的但是它并不遵守我们的编码标准。”“什么我使用了正确的对齐和缩进啊。”Guru退了一步紧紧闭住眼睛并挥手示意我安静。“不不不不。没有哪种编码标准值得你浪费时间这样定义东西包括我们。除了当然嵌入表是有害的不管是用哪种形式的使用空格的缩进。不你可能看的是鲍勃在他以前工作时带来的标准但这些东西现在并不适用。”“还有,”她继续道“问题是你对static的使用你这种static的使用方法是老式的、陈旧的、不提倡使用的而且大多数都被认为是有缺陷的。”。她打开了她的书现在我知道那是Stroustrup的The C Programming Language [1],找出一处临近书尾的地方引述道“用static来表示‘本地于编译单位’在C中是不被提倡的...”她透过了眼镜看了看我继续引述“用无名的名字空间来代替。”我灵机一动“哦我知道该怎么做了”我改正了代码//--- file trans.cpp -----------------------------//namespace{void Output( ostream o ) { /*...*/ }}// ...void ProcessTransaction( /*...*/ ){// ...Output( cout );// ...}“当然我的徒弟我现在确实相信我们过时的嵌入式编译器可以正确的处理你修订过的代码。”声音渐渐的消失我转过身去发现Guru已经不见了就像她来的时候。我笑了笑活动了一下指关节成功的重写了代码并通过了所有的编译器编译和单元测试并呈交了代码。我微笑的打开了email给鲍勃发了一封简短而又含糊其词的通知。[参考文献][1] Bjarne Stroustrup. The C Programming Language, 3rd Edition (Addison-Wesley, 1997).