如何适应? C 艹程序员做 ANSI C 的项目

2023-06-08 20:44:10 +08:00
 w1lu0bOo

别说 STD 和 C++11+ 了,class, template 都用不了,完全束手束脚的感觉,要怎么适应呢?

3691 次点击
所在节点    C++
44 条回复
tool2d
2023-06-08 20:57:29 +08:00
写 C++代码,然后源码转译到 C 代码。
zhuangzhuang1988
2023-06-08 21:37:21 +08:00
学习 libuv mruby libgit2 的代码
koebehshian
2023-06-08 23:33:11 +08:00
嵌入式表示,有时连 malloc 都用不了
duke807
2023-06-09 00:40:24 +08:00
c 写面向对象没啥问题,参考 linux kernel 的 container_of 方式。
譬如看一下我这个目录的 mcu 代码,其中有好几种驱动,它们都基于同一个子类型:
https://github.com/dukelec/cdnet/tree/master/dev

template 没啥用,需要的话用宏定义就行,还可以配合 typeof 和新的 _Generic 关键字
duke807
2023-06-09 00:43:35 +08:00
@koebehshian

我喜欢把数组转成链表,用来做固定大小的内存分配,不担心实时性和内存碎片

譬如这个文件开头的 init 函数:
https://github.com/dukelec/cdcam/blob/master/cam_fw/usr/app_main.c
cnbatch
2023-06-09 02:00:13 +08:00
@duke807 OP 特意强调“ANSI C”,很大可能性是 C89 ,想用_Generic ?不存在的。搞不好连 for 循环第 1 个分号前的初始化语句都不能声明变量。
如果真的是 C89 ,那就属于是连 Linus 都不得不抛弃的版本。
cnbatch
2023-06-09 02:54:59 +08:00
同情 OP 。
说实话,我也很难适应这么老旧的语言标准,无论是 C89 还是 C++98 。
因为我很不爽这两个旧标准,以至于很长时间内我都泡在 C# 生态当中,连 QT 都不想碰。直到后来无意中被所谓的“析构”(Finalizers) “坑”了一把(毕竟写 Dispose 实在啰嗦)。

恰好,此时 C++11 和 C11 已经发布了,我一看新内容,还好能够接受。于是工作以外的场景就重新入门了。
工作场景仍然是 C# 为主(我没换工作),但工作时的自用工具会尽量用新标准 C++去写(能 C++就 C++,我懒),除非遇到公司的老旧 RHEL 只提供 GCC4.8 那才没办法,还好可以用大部分 C11 特性(其他组淘汰给我们当玩具的,没多久就清理掉了)。

经历过新标准的爽快被迫再退回去几十年前的标准,我很理解 OP 的心情。

换成是我,那就只能先用 C++写一遍具体代码,然后转写成等效同年份 C 代码,再根据编译器的错误提醒,进一步回退到 C89 。
1423
2023-06-09 03:36:55 +08:00
硬着头皮,扛过去就好了。。
hanxiV2EX
2023-06-09 05:38:43 +08:00
lua 源码还是 ansi c
ederodan
2023-06-09 08:48:05 +08:00
往好处想这是是一个提高自己内存管理能力的好机会
tairan2006
2023-06-09 08:58:42 +08:00
用 GObject?
cstj0505
2023-06-09 09:06:57 +08:00
同时在写 java ,c ,sql ,放平心态就好,c 就不要想着快速出活,对自己编码和算法细节的打磨很重要
yolee599
2023-06-09 09:12:11 +08:00
C 挺好的,可以慢慢研究
zhyl
2023-06-09 09:18:06 +08:00
写 vlang ,然后编译成 c 代码
aa514758835
2023-06-09 09:20:53 +08:00
确实不方便,可以在 github 上先正好三方基础库,老外写的纯 c 的基础库很不错的,有脚手架,就好干活了
minami
2023-06-09 09:36:10 +08:00
glib 一把梭,除了啰嗦基本啥都有
m1a0
2023-06-09 09:39:55 +08:00
返璞归真, 挺好的, 适应了就好。
LXGMAX
2023-06-09 10:28:12 +08:00
自动挡换手动挡自然要熟悉适应
lovelylain
2023-06-09 10:36:01 +08:00
是机器上没有 c++运行库还是项目代码是纯 c ,后者的话用 c++实现功能编译成 so 给 c 调用。
hpepper
2023-06-09 15:08:22 +08:00
能否添加个联系方式 我这有个 c++的问题,可以有偿。

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

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

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

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

© 2021 V2EX