【问题标题】:Is there a way to replace a function during compile time in C++? [duplicate]有没有办法在 C++ 的编译期间替换函数? [复制]
【发布时间】:2017-01-11 07:48:14
【问题描述】:

假设我有大量 .c 文件,其中一些使用函数 foo()。此函数未在这些文件中定义。

虽然我为 .c 文件保留了这些代码,但当我将它们编译为可执行文件时,我希望所有这些文件都调用 bar() 而不是调用 foo()。有没有办法通过 Makefile 做到这一点?

【问题讨论】:

  • 有可能,但这听起来像是XY problem,所以您可能还想解释一下您想要这样做的动机,以防有更好的整体解决方案。
  • .c 是 C,而不是 C++。
  • 除了链接文件中的解决方案外,还有明显的“添加int foo() { return bar(); }”解决方案。
  • @PaulR 主要原因是文件数量太大,无法逐个编辑。

标签: c++ makefile


【解决方案1】:

C 有一个叫做preprocessor 的东西。它用于在编译时做事(如果我们想学究气,它实际上是在编译器之前运行的)。

例如,#include <stdio.h> 告诉预处理器包含 stdio.h 文件。

您可以通过# 符号识别出一行是针对预处理器的。

这是一个更详细的示例,与您的问题相关:

void foo() { ... }
void bar() { ... }

#ifdef USE_BAR
#define foo bar
#endif

foo();

如果你#define USE_BAR,任何时候你调用 foo,它都会调用 bar。您可以在 makefile 中定义 USE_BAR。

请注意,使用宏可能会导致代码可读性和可维护性问题。

【讨论】:

  • 预处理器在编译时不做任何事情,它在实际编译之前做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-16
  • 2017-08-21
相关资源
最近更新 更多