2

我目前正在编写一个包含单独测试构建的 C 项目。

测试是不同的 C 进程,它们使用源代码来测试我的代码 (TDD) 中定义的每个函数。

我想在这些测试中进行猴子修补。我花了一些时间看看它可以做什么,我认为最简单的选择是使用 gcc 属性功能:https ://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Function-Attributes.html

对于测试构建,我希望我的所有函数都是弱的(IE,我想要的效果就像我__attribute__ (( weak))在 C 文件的任何函数声明之前写的一样。)

我想知道是否有一种方法可以在默认情况下将这个弱属性作为编译选项传递,而不是在每次需要时手动进行。现在我正在使用一个宏来测试构建是否在测试中,如果是,则在我想要的每个函数之前添加这一行。我宁愿避免复杂化源代码只是为了允许一些测试功能。

google 上的这个主题被重复使用相同的琐碎属性所污染,但我找不到任何设置属性默认值的方法。

但是,我发现这本书https://link.springer.com/chapter/10.1007%2F978-1-4302-0704-7_4可能包含解决方案,但我不会为此支付 30 美元。所以我在这里问这个问题。

有些人可能认为这是一个坏主意,但在我的情况下,我认为这很好。请记住,我的测试套件由许多与我的代码链接的单声道 C 文件组成,并且请记住,正常的构建不会受到新的测试构建选项的影响。

4

1 回答 1

2

跟风怎么样?

  1. 您制作单独的文件(我们称之为weak.h),所有符号都需要转换为弱形式

#pragma weak func1

#pragma weak func2

#pragma weak func3

...

  1. 在测试编译期间,您添加默认包括以下

gcc -include weak.h ...

我自己从未尝试过这种方法,但这样做不会影响您的代码,这似乎是您最想要的

附言

刚刚尝试过,因为几个符号源文件似乎可以在 Ubuntu 18.04 x64 上运行

于 2020-04-06T18:11:58.983 回答