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

328 天前
 w1lu0bOo

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

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

template 没啥用,需要的话用宏定义就行,还可以配合 typeof 和新的 _Generic 关键字
duke807
328 天前
@koebehshian

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

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

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

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

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

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

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

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

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

© 2021 V2EX