首页 > C/C++语言, 编程语言, 轶事趣闻 > 恐怖的C++语言

恐怖的C++语言

2009年11月11日 发表评论 阅读评论 7,672 人阅读    

我爱C++ Linus曾经(2007年9月)在新闻组gmane.comp.version-control.git里和一个微软的工程师(Dmitry Kakurin)争执过用C还是用C++,当时的那个微软的工程师主要是在做Git的Windows版,但他却发现Git的源码居然是C语言写的,而不是C++,于是他(Dmitry Kakurin)在Linux社区里发贴表示对Linux的不满,语言很直接:

Pure C as opposed to C++. No idea why. Please don’t talk about portability, it’s BS. (纯C写的,而不是C++,不知道为什么,请别告诉我是为了移植性,这完全是胡扯。)

Linux之父Linus Torvalds马上跟贴,在贴子中,Linus言辞很直接,直接表明C++是一个很恐怖的语言,他在贴子中说:

*YOU* are full of bullshit. C++ is a horrible language. It’s made more horrible by the fact that a lot of substandard programmers use it. (你才是完全在胡扯。C++是一门很恐怖的语言,而比它更恐怖的是很多不合格的程序员在使用着它

Linus的这个观点我是比较同意的,我个人也在几年前的《STL String类的写时才拷贝》以及以后的一些文章中表达过C++的确并不是一个很成熟的语言,这种观点一直都围绕着我。这是因为它的学习成本实在是太高了,编译器和类背着你做了很多你不知道的事,而且,C++非常容易地出错和发生很多意想不到的问题。

当然,这篇文章并不是要继续声讨C++,也不是回顾以前的某个事件。我们这里只谈技术。昨天,我在网上看到一个邪恶的C++的示例,在这里给大家share一下,让大家看看C++这种编程语言的恐怖和邪恶的一面。下面的这个例子,比那个“#define  private  public”还更加邪恶。

请看下面这段代码,你能告诉我它会输出什么吗?(注意main函数中高亮的那一行)

#include <iostream>
#include <vector>

typedef int UINT4;
using namespace std;
class Hack
{
};

Hack& operator< (Hack &a , Hack &b)
{
    std::cerr << "小于操作符\n";
    return a;
}

Hack& operator> (Hack &a, Hack &b)
{
    std::cerr <<  "大于操作符\n";
    return a;
}

int main(int argc, char ** argv)
{
    Hack vector;
    Hack UINT4;
    Hack foo;

    vector<UINT4> foo;

return(0);
}

不是吧是的,上面这段代码如果只看main函数中的那句“vector<UINT4> foo”,你会觉得很眼熟,然而,事情并非那么简单,我们可以看到vector, UINT4和foo都是Hack类的实例,这就是邪恶的开始,那两个尖括号< >则成了两个运算符,大于和小于,这两个运算符却又被重载了。其实,真正的语句是:

vector.operator<(UNIT4).operator>(foo);

所以,所有的一切都符合我们的C++的规范和语法,自然程序也能被顺利编译通过(至少,在我的G++上是没有问题的)。而整个程序的运行结果自然是:

$ ./horror
小于操作符
大于操作符

是的,如果你通晓C++的一切的一切,你自然不会对这段程序感到惊奇。这样的事情在C/C++的世界中并不少见,要搞乱C/C++的代码并不是一件难事,花样多得数不胜数,只要看看《6个变态的C语言Hello World程序》你就知道了,而且,还有一个简单的教程《如何加密/混乱C源代码》告诉你一些简单的做法。

那么,如果你有一天在读程序中看到“vector<UINT4> foo”,你会觉得那只是一个幻觉吗?

(全文完)





好烂啊有点差凑合看看还不错很精彩 (37 人打了分,平均分: 4.51 )
Loading ... Loading ...
  1. iloveit
    2010年12月16日22:33 | #1

    自从知道Python以后就抛弃C++了。。
    专注于 C + Python

  2. jack
    2011年5月19日00:55 | #2

    这个例子能说明什么?
    变态的东西, c语言就写不出来么? 断章取义.

  3. jack
    2011年5月19日01:08 | #3

    再说, 这世界上用c++写的优秀的东西也可以说是不计其数吧?
    c++不成熟? 难道只有c和汇编或者什么java才是成熟的语言?
    再说, 哪个语言不会隐藏些东西在背后?
    如果真的那么严重的不行, 除非全世界人都傻吧, 否则会有用c++来做产品吗?
    我只同意liuns后半句”很多不合格的程序员在使用着它”.
    这些人即便是用c, 也不会好到哪里去, 甚至会更差, 估计会更乱七八糟…

  4. week
    2011年6月28日13:26 | #4

    我始终认为C++是一门非常优秀的语言,在工程上比C强的多了.在编译的内部当然会有一些东西隐藏,关键是你知不知道如何去用它.容易出现错误只能说明你的管理能力差,你对它并不了解.要是比效率大家最好去用汇编,那多快呀.可你能编出100万行的汇编应用程序吗?

  5. zz
    2011年6月29日10:54 | #5

    完全认同 用c++也好几年了 越来越觉得陷进多 如果没有10年c++深入研究 还是用c稳当点

  6. zz
    2011年6月29日10:55 | #6
  7. 受到了风
    2011年11月12日22:08 | #7

    我觉得这个例子完全是在吹毛求疵,我觉得编程完全可以用一种大众更容易接受的形式来进行,而不是越走越远。

评论分页
1 2 1724
  1. 2010年8月31日17:23 | #1
  2. 2011年3月30日19:28 | #2
  3. 2011年3月31日18:31 | #3
  4. 2011年4月1日13:12 | #4
  5. 2011年6月28日11:35 | #5
  6. 2011年7月11日22:33 | #6
  7. 2011年7月31日00:20 | #7
  8. 2011年8月11日11:24 | #8
  9. 2011年8月14日01:29 | #9
  10. 2011年12月20日14:36 | #10

无觅相关文章插件,快速提升流量