gpt4 book ai didi

c - 包含 .c 文件的副作用

转载 作者:行者123 更新时间:2023-11-30 16:38:29 25 4
gpt4 key购买 nike

免责声明:我知道这里已经提出了类似的问题,但没有人回答我的问题。

使用的编译器:XC32 v1.44(基于gcc)环境:嵌入式(我也在使用FreeRTOS,但这应该不重要?)

对于我的项目,我想要较高的测试代码覆盖率。我的界面非常时尚,我有很多(私有(private))静态函数,我想单独测试它们。因此,在我的测试文件中,我包含了 c 文件。现在我可以访问静态函数了,一切都会好起来的。但事实并非如此。

我必须指出,我没有从项目中排除 c 文件。因此,代码很可能被编译两次,一次作为单个 c 文件,一次作为包含在测试文件中。

我没有得到任何编译或链接器错误(我在其他问题中读到了我应该得到的)。而且代码运行正常 - 大多数情况下。

代码还会被访问两次,一次由测试访问,一次由仍在后台运行的常规状态机访问。

我的效果是现在看起来一切都是重复的。因此,所有静态变量都会创建两次,并且常规状态机正在访问与测试不同的静态变量。

示例:

static int myInt = 0; // lets assume this would be possible in c...
static void Increment()
{
++myInt;
}
static int getIncrement()
{
return myInt;
}

因此,当状态机调用 Increment() 并且测试调用 getIncrement() 时,测试仍然得到 0。

这是正确的还是比我想象的更复杂?我目前的效果是,我在测试中调用一个函数(来自包含的 c 文件),该函数打开某个处理程序(该处理程序存储在静态中),但调用(在我的测试中)使用第二个函数该处理程序声称仍然为 NULL...这种行为不符合我上面的解释...

最佳答案

如果您有一个带有静态变量的 C 文件(在本例中为您的计数器),并且该文件包含在不同的文件中,那么这些静态变量将被复制到 C 存在的每个文件上。 文件包含在此 C 文件本身中。如您所知,静态全局变量仅在定义它们的文件中是已知的,因此您现在有许多具有相同名称的不同静态变量。

您只需定义一个计数器并将其外部到所有其他文件中。

因此,简而言之,您正在递增并读取两个具有相同名称的不同变量。

关于c - 包含 .c 文件的副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47470201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com