在很大程度上,C++是C的超集,这意味着一个有效的C程序也是一个有效的C++程序。C和C++的主要区别是,C++支持许多附加特性。但是,C++中有许多规则与 C 稍有不同。这些不同使得 C 程序作为C++程序编译时可能以不同的方式运行或根本不能运行。如果使用C++的编译器编译C程序,就知道这些不同之处。
声明一个有标记的结构或联合后,就可以在C++中使用这个标记作为类型名:
struct duo
结果是结构名会与变量名冲突。例如,下面的程序可作为C程序编译,但是作为C++程序编译时会失败。因为C++把printf()语句中的duo解释成结构类型而不是外部变量:
在C和C++中,都可以在一个结构的内部声明另一个结构:
在C中,随后可以使用任意使用这些结构,但是在C++中使用嵌套结构时要使用一个特殊的符号:
C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。
在C中,直接初始化结构数据成员是不可行的,但可以在C ++中完成。
在C语言中使用typedef可以在定义变量上达到与C++类似的效果。
如下面在《数据结构》中常用的定义链表的语句,为了同时兼容C和C++,利用typedef将结构体声明语句取一个别名(即Node是struct Node的别名),并设置与结构体与同名,达到C++直接定义变量的效果。
而去掉typedef后,下面的语句是直接定义了一个名为Node的变量。