c - 要模拟的弱别名

标签 c

我正在尝试使用

来模拟 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/

相关文章:

c - objcopy 如何计算将 elf 文件的哪些部分插入到输出文件中?

c - 静态函数和内联函数是否应该在 .h 文件中定义?

c - 文件的变量字符串名称不起作用?

c - 系统调用在 Linux 上的哪个库中?这个库如何链接到包含系统调用的可执行目标文件?

c - 信号处理程序不工作

c - 多用途结构方法的命名约定

c - 如何在C中打印二进制数据?

C:sizeof()相关疑惑?

c - C在重新分配后是否重用内存?

c - 在 C 中从 stdio 扫描字符串和整数