2. 语言特性
首先我不想评价所谓“pascal是玩具语言”这种无知的说法。某些连basic都用不好的人是不可能正确评价其它语言的优劣的。至于“只配高中生使用”就更加可笑了:
peter norton没上过大学,id software的john carmack没上过大学,你不服气?!请不要嘲笑高中生,大多数程序员可能永远也达不到这些“高中生”的水平。创造性工作需要的是天才,你认为天才相当于什么学位?:-)
(1) 预处理,宏以及.h文件
object pascal不支持预处理,其实是不需要。无法直接编译源代码的编译器才需要预处理器的支持(用于翻译/规范源程序(也包括.h之类)以利于编译)。预处理器的出现是因为当初ken thompson和dennis ritchie要在只有256k内存的pdp-11上实现c编译器难度很大,才采取的折衷办法。现代大多数c/c++产品已经把预处理器包含在编译器中了。
(ps:c中采用尽可能短的关键字/运算符也是由于这个历史原因)
至于macro和.h则应该说是垃圾特性,只是由于兼容性的考虑才保留下来的。ansi/iso c/c++规范中明确建议:“不要使用macro和.h,应该使用程序中的常量定义和函数替代”。因为macro和.h不是c/c++的语言特性(这是真的!),没有明确统一的语法定义。还会导致编译速度降低,另外由于macro在每个使用的地方被展开(不是调用),大量使用macro会使生成的代码臃肿。
(2) 集合,子界类型
c++不支持这些object pascal的原生类型(编译器能直接识别的)。但可以用类来模拟,毕竟c++的对象结构是最复杂灵活的(ada除外)。不过性能有损失。
(3) 枚举类型
object pascal不支持为每个枚举元素指定值。
例如c/c++中可以定义:enum aweek {sun = 1, mon, tue ...};
object pascal中只能定义:aweek = (sun, mon, tue ...);
(4) 数组
文章来源于领测软件测试网 https://www.ltesting.net/