存档

  • [分享]Deep C——Programming is hard

    据说编程很容易。按预计未来所有人都会编程,就像现在几乎每个人都会开灯一样。至少目前非常多的文科生也上C语言课。 但是做个合格的C语言程序员就不容易了(但是只有少数专业人士才能完整地知道怎么发电)。不信?看看作者的slide来挑战一下——至少继很早之前就完全不敢声明“精通”,从今以后我声称自己熟悉C前要也要犹豫一番了。 能写“Hello World”与很清晰地知道一个Hello World程序编译/解释和执行的具体原理之间的差别是很大的。 另外比较搞的是这个slide后面有个评论: jbonnemaVery persuasive presentation indeed. After reading it, I have reached the following conclusions: 1. Women are definitely smarter than men. 2. C was written for Borg. Deep C by Olve Maudal on Oct 10, 2011   Programming is hard. Programming correct C and C++ is particularly hard. Indeed, both [...]

    2012年3月16日 | 归档于 C/C++
    标签:
  • [转水木讨论]多重继承下的虚函数表?强制类型转换?

    关于一道微软09的笔试题。 点评:作为一个不会C++的人,稍微一看此题没头绪,再一看就思维紊乱了……遂跑了几个实验先看看,先把各种情况下的输出结果摸清楚了。但是各种解释如C++的多重继承、虚函数表什么的都不知道,看到别人讨论就像听天书——会C不会C++是不行的! 题目描述 题目来源:http://www.newsmth.net/bbscon.php?bid=335&id=331723 发信人: prancema (喵了个咪), 信区: CPlusPlus 标  题: 问题求教:以下程序的输出结果,以及解释? 发信站: 水木社区 (Fri Sep 16 12:09:25 2011), 站内 恳请大牛现身解答。多谢! class InterfaceA{ public: virtual void Foo(double *) = 0; }; class InterfaceB{ public: virtual void Foo(int *) = 0; }; class CProblem : public InterfaceA, public InterfaceB{ public: void Foo(double *){cout Foo(NULL); ((InterfaceB*)(CProblem *)voidPointer)->Foo(NULL); [...]

    2011年9月17日 | 归档于 C/C++
  • C/C++声明作用域:一直以来没意识到的“遮蔽”

    该问题由今天师兄不小心遇上一个类似的问题引发。先上代码: #include <iostream> using namespace std; int main() { int i = 0; { printf(“%d\n”, i); int i = 1; printf(“%d\n”, i); } return 0; }   由于向来对C++不是特别熟,最近都在用swt写界面,第一眼遇到这个问题时愣了一下,但是还是记得C/C++中是允许在内部语句块里重用一个外部变量名,不过这种写法还是让我很诧异。 引用《C++程序设计语言(特别版)》中p74页的解释: 一个声明将一个名字引进一个作用域;也就是说,这个名字智能在程序正文的一个特定的部分内使用。对于函数里声明的名字(经常被成为局部名字),其作用域从它声明的那一点开始,直到这个声明所在的块结束为止。一个块就是由{}围起来的一段代码。 上面这一段说明看起来没什么,不过接下来解释“遮蔽”的地方足够令人重视—— 全局名字的作用域从声明的那一点开始,一直延伸到这个声明所在文件的结束。在一个块里声明的名字可以遮蔽在其外围块里所声明的名字或者全局的名字。也就是说,在一个块里可以重定义一个名字,让它引用另一个不同的实体。在退出这个块之后,该名字恢复它原来的意义。 正如作者提示,“遮蔽某些名字在写大程序时是不可避免的”,这是其在C/C++中存在的理由。当然,由于大程序很少出现,在短的程序中重复用同一个名字命名变量的情况也很少,另外,不少C编译器中要求变量在块首中定义,即“由于这类错误相对不那么常见,他们反而很难被发现”。 仔细想起来,由于写大程序较少,向来用C++写程序只是C加上少许C++特性情况较多,加上从开始学程序起就要求强调代码风格,这么多年都主动规避了这种错误。 参考文献: 《C++程序设计语言(特别版)》机械工业出版社,Bjarne Stroustrup著,裘宗燕译

    2011年3月29日 | 归档于 C/C++
    标签: ,
文章标签 ‘C++’