我正在尝试使用
来模拟 fn say foo#ifdef UT_TEST
void foo(void) __attribute__ ((weak, alias ("foo_impl")));
#else
void foo(void);
#endif
但是,有没有办法在运行时而不是编译时执行此操作?由于历史原因,我无法使用 C++。
最佳答案
过去,我主要看到这个问题在构建系统级别得到解决,我认为这是一个更干净的解决方案。这样做可以避免大多数 ifdef,而是使用完整文件。在 make 中,它可能看起来像这样:
OBJS += file1.o file2.o
ifeq ($(UNIT_TEST),y)
OBJS += dummy_implementation.o
else
OBJS += real_implementation.o
endif
myprog: $(OBJS)
或更经典的 make 习语:
OBJS-y += file1.o file2.o
OBJS-$(UNIT_TEST) += dummy_implementation.o
OBJS-$(REAL_BUILD) += real_implementation.o
OBJS = $(OBJS-y)
myprog: $(OBJS)
在这种情况下,dummy_implementation.c 和 real_implementation.c 将共享一个头文件。
关于c - 要模拟的弱别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39477883/