难以理解的C语言

因为感染新冠在家,看到书架上10年都没有再碰过的《C语言程序设计-现代方法》,随手翻了一下,里面有一段讲IOCCC(International Obfuscated C Code Contest 国际模糊C语言大赛),鼓励参赛者写最难懂的C程序。例如,1991年的“最佳小程序”如下:

v,i,j,k,l,s,a[99];

main()

{

for(scanf("%d",&s);*a-s;v=a[j*=v]-a[i],k=i<s,j+= (v=j<s&& (!k&&!!printf(2+"\n\n%c"-(!l<<!j)," #Q"[l^v?(l^j)&1:2])&& ++1||a[i]<s&&v&&v-i+j&&v+i-j))&&!(1%=s),v||(i==j?a[i+=k]=0: ++a[i])>=s*k&&++a[--i]) ;

}

这段程序用于打印八皇后问题。

工作10年后,看到IOCCC这样性质的竞赛,还有这段天书一样的代码,心情完全不一样。佩服写出上面这段代码的牛人,思维能力有多强才能写出和理解这样的代码。

工作里面看的、写的都是商业代码,总体的要求都是易读、易维护、易扩展。而C语言本身是与机器紧密结合的,决定了C语言难以理解的特点。所以,后来才有了《代码整洁之道》、《重构》等书籍在C语言中的用武之地。

编程比较重要的是抽象思维,是对一个需求或功能使用程序或代码来表达,在写代码前做一下设计、建模,实际就是对需求或功能进行抽象,有助于写出更好理解和更好扩展的代码。

我们的工作中可能永远都不会写上面的程序,写易读、易改的代码更符合主流的审美。

make it easier to understand and cheaper to modify.

——Refractoring - Improving the design of existing code        

IOCCC官网:

The International Obfuscated C Code Contest

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值