c++ - 可行的语言是否需要预处理器?

标签 c++ c-preprocessor language-design

C++ 预处理器真的有用吗?即使在 C# 中,它仍然具有一些功能,但我一直在考虑完全放弃它的使用,以使用一种假设的 future 语言。我想有些语言,如 Java,即使没有这样的东西也能生存下来。没有预处理步骤的语言是否具有竞争力和可行性?用没有预处理器的语言编写的程序采取什么步骤来模拟它的功能,例如用于调试和发布代码的不同代码,这些与 #ifdef DEBUG 相比如何?

最佳答案

事实上,大多数语言都可以在没有预处理器的情况下处理得很好。我会继续说,使用带有 C/C++ 的预处理器的必要性源于它们缺少几个部分的功能。

例如:

  • 大多数语言不需要头文件并包含保护程序,因为它们具有“模块”的概念。
  • 可以通过static if或类似机制轻松获得条件编译。
  • 几乎总是可以通过比预处理器更清晰的方式来减少代码重复:使用模板/泛型、反射系统等。

所以我的结论是:对于您可以通过预处理器和元编程获得的大多数“功能”,存在更安全、更方便使用的更清晰的替代方案。

D 编程语言作为一种编译型低级语言,是关于“如何提供通常通过预处理器完成的大多数功能,而无需实际预处理”的一个很好的示例 - 包括我提到的所有内容,以及字符串混合和模板混合,并且可能还有其他一些巧妙的解决方案,这些解决方案通常可以通过 C/C++ 中的预处理解决。

关于c++ - 可行的语言是否需要预处理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4308816/

相关文章:

dynamic - 为什么 Clojure 是动态类型的?

c++ - 为什么 main() 需要大括号?

c++ - “no match for ' operator< '” 尝试插入到 std::set 时

c++ - 为 double * obj 和 obj * double 重载 * 运算符的问题

c-preprocessor - #ifdef WIN32 #elif WIN64 #endif

c# - 在C#中使用 "#define IDENTIFIER String"作为别名?

c++ - 在自定义类中定义 vector

c++ - 结合CUDA 9和GCC4.3编译的C++软件

c++ - 获取命令行选项

c++ - 在 C/C++ 中为什么 do while(expression);需要半冒号吗?