GCC 可以忽略函数的静态声明吗?

标签 c unit-testing gcc

在我的应用程序中,我有一个用于伪单元测试的构建配置(这更像是一种手动调试专用功能)。

在那些单元测试中,我想访问在它们的翻译单元中声明为 static 的函数。

是否有 GCC 选项允许我从任何地方调用 static 函数?

我想避免:

#if UNIT_TEST_MODE
void myfunction(void)
#else
static void myfunction(void)
#end
{
    // body
}

无处不在!

感谢您的帮助:)。

最佳答案

不必赘述。为每个静态函数使用前缀定义:

#if UNIT_TEST_MODE
#define UNIT_TEST_STATIC
#else
#define UNIT_TEST_STATIC static
#end

UNIT_TEST_STATIC void myfunction(void)
{
    // body
}

另一种选择是将所有静态函数从那个 .c 文件移动到一个单独的头文件中。该 header 仅包含在该 .c 文件中,但如果需要,它可以包含在单元测试 .c 文件中。这些函数将在其他文件中保持不可见,除非手动包含标题。
(它们必须被定义为static inline。)

关于GCC 可以忽略函数的静态声明吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37484085/

相关文章:

c - 在 C 中释放特定类型的内存分配

无法链接 linker.ld

c - 检测 C 中的算术溢出

c++ - 如果参数有成员变量,则特化函数

c - SSE2 和内联汇编插入结构

gcc - 有没有MinGW+MSYS的包管理系统?

c - 为什么 execvp 接受 2 个参数

swift - 插入函数作为参数

c++ - 在 Google 的 C++ 测试框架中为多个单元测试创​​建一个二进制文件

java - @WithMockUser 自定义用户实现