我成为了面向对象代码时代的专业程序员,并且拥有多年的C ++编程经验。我经常处理具有多年遗留代码的大型项目,这些代码混合了c ++和c。 我觉得在纯c部分系统上工作不太舒服。从C ++编程我理解所有的c语法,但是我知道如何组织一个没有对象的复杂c程序,以及构成我想要填充的内存的最佳实践。我作为一名java程序员工作后学习了c ++,并且认为更多的c会让我成为一名更好的c ++程序员,并且将一点点的java翻译成c ++程序员
答案 0 :(得分:1)
我和你的船基本相同(尽管经验较少,我开始使用Python而不是Java),对我来说最有效的是坐下来阅读Kernighan和Ritchie。由于您对语法很满意,因此您可以浏览本书的前半部分,但您肯定会更好地理解低级内存管理。
阅读与内存管理有关的Linux内核源代码部分也有帮助,但不适合胆小的人或容易厌倦。
答案 1 :(得分:1)
答案 2 :(得分:1)
在组织方面,查看POSIX APIs,尤其是pthreads,可以让您了解如何组织C代码。良好的C项目组织的基本规则是:
答案 3 :(得分:1)
扩展another answer,一种方法就是编写面向对象的C.这就是我与之交互的大多数库的行为方式(例如GNOME堆栈几乎完全是面向对象的C,主要是基于gobject库让它变得更容易)。你可以把它想象成没有一些语法糖的C ++。
你最终得到了像
这样的API
/* in project NewStuff; namespace is ns */
ns_foo_t *ns_foo_new ();
void ns_foo_delete (ns_foo_t *);
int ns_foo_make_waffles (ns_foo_t *this, int no_of_guests);
int main () {
ns_foo_t *my_foo = ns_foo_new ();
ns_foo_make_waffles (my_foo, 1);
ns_foo_delete (my_foo);
}
几乎完全对应
class Foo {
public:
Foo () { /* whatever */ }
int make_waffles (int no_of_guests) {}
};
int main () {
Foo *my_foo = new Foo ();
my_foo->make_waffles (1);
delete my_foo;
}
答案 4 :(得分:1)
您还可以查看由Kernighan和Ritchie撰写的The C Programming Language ANSI C Edition。是的,它已经过时了,但它只有大约200页,涵盖了整个语言以及标准库。
答案 5 :(得分:0)
无论如何,研究广泛使用指针和低级结构的构建程序将是一个良好的开端。它还取决于为其构建的程序。您是否尝试在嵌入式rtos板或微控制器系统上编写C代码?