有没有任何教程可以帮助熟练的c ++程序员学习c?

时间:2009-08-02 23:59:28

标签: c++ c

我成为了面向对象代码时代的专业程序员,并且拥有多年的C ++编程经验。我经常处理具有多年遗留代码的大型项目,这些代码混合了c ++和c。 我觉得在纯c部分系统上工作不太舒服。从C ++编程我理解所有的c语法,但是我知道如何组织一个没有对象的复杂c程序,以及构成我想要填充的内存的最佳实践。我作为一名java程序员工作后学习了c ++,并且认为更多的c会让我成为一名更好的c ++程序员,并且将一点点的java翻译成c ++程序员

6 个答案:

答案 0 :(得分:1)

我和你的船基本相同(尽管经验较少,我开始使用Python而不是Java),对我来说最有效的是坐下来阅读Kernighan和Ritchie。由于您对语法很满意,因此您可以浏览本书的前半部分,但您肯定会更好地理解低级内存管理。

阅读与内存管理有关的Linux内核源代码部分也有帮助,但不适合胆小的人或容易厌倦。

答案 1 :(得分:1)

一些谷歌搜索结果:

C for C++ programmers

C for C++ programmers 2

答案 2 :(得分:1)

在组织方面,查看POSIX APIs,尤其是pthreads,可以让您了解如何组织C代码。良好的C项目组织的基本规则是:

      
  • 不要暴露你的结构。仅使用不透明类型。
  •   
  • 使用库和数据类型名称作为函数名称的前缀。
  •   
  • 为分配/构建和销毁/解除分配提供“创建”和“销毁”功能。
  •   
  • 将opaque类型作为第一个参数传递给在该类型上运行的函数。
  •   
  • 使用C或C ++实现C API(由您自己决定)。显然,在那里使用非透明类型。

答案 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代码?