使用 C 语言一段时间之后的感受(C 语言的历史包袱,标准等)

2018-09-01 10:27:36 +08:00
 wheeler

最近在看SEI CERT C Coding Standard,每次都有新发现。

简单的感受就是:C 语言的历史包袱重,坑多。要想写出可靠的代码得小心,同时也要求项目管理者严格的管理,比如 kernel 这种。

C 标准相当晦涩,比如Undefined BehaviorUnspecified BehaviorImplementation-defined Behavior。各种语言律师才清楚的语言细节(language-lawyer)。

常说“功夫在诗外”,这种语言的细节让我觉得不该把精力投注于此,不知 V2EX 的各位怎么看待这个问题的?

注意

5081 次点击
所在节点    问与答
33 条回复
qwertyssp
2018-09-01 10:38:36 +08:00
何出此言
zn
2018-09-01 10:39:15 +08:00
没有历史包袱的语言大概只有上帝语了。

C 语言的最大优势是可以直接操作底层,同时保持高级语言的语法,语言本身也很简单。

这个优势决定了在很多地方,尤其是在资源紧张的地方,C 是最优语言,所以在可见的将来,C 语言不会没落。
AngelCriss
2018-09-01 10:48:52 +08:00
其实 lz 只是,不会用而已
wzxlovesy
2018-09-01 10:52:29 +08:00
我觉得倒不是 c 包袱太重,我个人用 c 就把它当作高级汇编用,还是挺随心所欲的。

包袱重的是各种组织或项目对于 c 编写的扩展代码的要求,甚至是库也有很多包袱。

所以我觉得语言本身没啥问题,扩展太繁复而已。但如果像我这样不用任何库的话,也就没什么好怕的了。
wzxlovesy
2018-09-01 10:53:20 +08:00
语言的细节不多,你说到的细节大概都是编译器的坑吧。
SiqingYu
2018-09-01 10:54:17 +08:00
这 Confluence 资源不错,收藏一波。
lance6716
2018-09-01 11:03:07 +08:00
面向 ISO 编程
lychnis
2018-09-01 11:11:16 +08:00
不知道你要写什么项目,需要看这些东西。我都没看过这些,写过驱动和嵌入式现在搞 Java 了。。。但没你说的这些东西,上面有哥们说你不会用。。哈哈 不是鄙视你,可能你真的是刚入门?我觉得没必要看这些东西,直接拿开始写就好了
yangxin0
2018-09-01 11:14:02 +08:00
写了十几年 c 语言和其他语言,c 语言是最简洁的。
wwqgtxx
2018-09-01 11:26:26 +08:00
你要是说 c 历史包袱重,c++学的得要命呀
zhangjn
2018-09-01 11:43:08 +08:00
没有觉得 C 语言有什么历史包袱啊, 这是我玩的最溜的一种语言了, 其次是 bash shell
arzterk
2018-09-01 12:23:51 +08:00
c 的抽象层次太低了,写复杂点的逻辑代码很累,只适合做靠近硬件和 os 的东西
zwyc
2018-09-01 12:28:29 +08:00
@zn nvidia 的 gpu 指令就是没有历史包袱,每一代不一样。每一代都是可以搞翻天覆地的变化。只要前面编译器做好就行;)
zn
2018-09-01 12:31:53 +08:00
@zwyc 其实每一代都是一宗新语言吧,只不过起名部实在是想不出那么多名字了,就沿用老名字了 🐶
zwyc
2018-09-01 13:04:28 +08:00
@zn 哈哈,差不多了
gamexg
2018-09-01 13:45:47 +08:00
c 没封装隐藏底层细节,坑倒是不多
但是累,写起来感觉麻烦。
innoink
2018-09-01 14:26:47 +08:00
c 的问题是,大项目不好管理,文档难写,难阅读,本身还是很简洁的
要说包袱和细节,c++要多得多
tomfs
2018-09-01 14:44:39 +08:00
第一次听说 c 还历史包袱重的,我个人觉得 c 已经是最简洁的语言了,楼主了解下 c++?
kawaiidora
2018-09-01 15:23:52 +08:00
同意,C 的流行主要是 Unix ABI,以及移植到新硬件最容易;在语言设计上也是考虑简化实现而不是简化使用。
wheeler
2018-09-01 15:44:55 +08:00
@tomfs
@zhangjn
可能我表述不够清楚,C 语言是很老的语言了,这就导致现在看来不太好的做法出于兼容性考虑仍得保持下去,比如宏;一些好的特性也很难加入进来,比如文件级别的 namespace。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/485120

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX