为什么我觉得C/C++好简单?
作者:卡卷网发布时间:2024-12-02 18:55浏览数量:106次评论数量:0次
很有可能是你没有见过生产级别的代码,甚至可能还不知道去哪里看。github上面有chrome/mysql/unreal engine之类的一大堆优秀软件的代码,个个都是就几百万行以上,你去看看自己能看懂几行,然后再来说简单不简单。
如果看完之后还觉得简单,那几百万/年的工作就是闭着眼睛找了。
从很远的地方看珠峰,就一个小山坡,感觉要爬上它易如反掌。距离越近,才会觉得越难。
编程也一样,你觉得它简单的时候,其实是因为离真正的编程还很遥远。
C语言语法级别的难,第一次见到的时候一头雾水的是这个:
send(to, from, count)
register short *to, *from;
register count;
{
register n = (count + 7) / 8;
switch (count % 8) {
case 0: do { *to = *from++;
case 7: *to = *from++;
case 6: *to = *from++;
case 5: *to = *from++;
case 4: *to = *from++;
case 3: *to = *from++;
case 2: *to = *from++;
case 1: *to = *from++;
} while (--n > 0);
}
}
do while和switch嵌套,其实是一种古老的发明:
https://en.wikipedia.org/wiki/Duff%27s_device算法级别的难,举个例子,Quake 3中求反平方根的算法,没人解释基本看不懂:
float InvSqrt (float x){
float xhalf = 0.5f*x;
int i = *(int*)&x;
i = 0x5f3759df - (i>>1);
x = *(float*)&i;
x = x*(1.5f - xhalf*x*x);
return x;
}
C++级别的难比C更多,数不胜数,当年让我觉得C++强大无比的是这个:
assert((o-----o
| !
! !
! !
! !
o-----o ).area == ( o---------o
| !
! !
o---------o ).area );
它其实是使用了一个库,在这里:
Multi-Dimensional Analog Literals编程其实是一种技术活,类似于绘画、雕刻、篆刻、制陶烧瓷之类的传统工艺,只是它的载体变成了计算机。学习过程是类似的,无论智商多高,都无法跳过大量的长时间的练习和采坑摸索,任何一个人都不可能在两个月内从编程新手变成高手。
随手一发,没想到那么多人看。评论区说题主说的是C/C++语言,不是逻辑。好吧,要说C++语言本身有多难那就更简单了。
考察C++掌握程度的资源非常多,例如这个,打开看看,很有可能第一题你就不会:
https://cppquiz.org/可以关注这个人的推,他经常提一些C++挑战性的问题:
https://twitter.com/shafikyaghmour还有一些常见的C++黑话,主要是一些C++编程技巧,有些甚至是C++独有的:
https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms第一个链接里面只有几百道题,我这么说吧,知乎上懂C++的人一定可以出一千道甚至是一万道C++的题目是才学2个月C++的人答不出来的,而即使对学20年C++的人,出一百道答不出来的也没多大难度。
免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。
相关推荐

你 发表评论:
欢迎