如何在平均值中添加和减去数字而不必遍历整个列表?
这在许多情况下非常有用.例如,连续计算流中最后X个值的平均值,将两个平均值相加,并根据新用户投票更新评级.
有三个文件:source1.c source2.c header.h
两个源文件包括标头.
这是标题的代码:
struct
{
int a;
int b
} x;
Run Code Online (Sandbox Code Playgroud)
现在发生的是结构变为全局,两个源文件现在共享名为x的结构.为什么会这样?
我知道如果你编写以下代码,它将产生两个全局变量.每个源文件一个.(他们不共享全局变量)
int x = 0;
Run Code Online (Sandbox Code Playgroud)
最后一段代码对我有意义,但我真的不理解结构的那一段.
编辑:
嗯这里的每个人都认为我应该得到链接器错误.我目前的代码是针对嵌入式系统(nxtOSEK).我稍后会尝试将其转换为常规C程序.
EDITEDIT:
我回来了常规C中的例子.正如你所看到的那样,不仅可以使用结构,还可以使用常规变量.
source1.c
#include "header.h"
int main(void)
{
f();
x = 1;
f();
}
Run Code Online (Sandbox Code Playgroud)
source2.c
#include "header.h"
void f()
{
printf("source2: %i\n", x);
}
Run Code Online (Sandbox Code Playgroud)
header.h
#include <stdio.h>
int x;
Run Code Online (Sandbox Code Playgroud)
产量
source2: 0
source2: 1
Run Code Online (Sandbox Code Playgroud)
请注意,不得声明x使其工作,否则会产生链接器错误,就像这里所说的每个人一样.(我不知道为什么它与嵌入式系统一起工作..)
看起来我也误读了Eric Postpischil的答案看起来是正确的.
我想创建一个接受函数指针和lambda表达式的函数.函数的返回类型应与函数指针/ lambda表达式的返回类型相同.
以下是一个函数的最小示例,该函数按预期工作,但仅适用于函数指针.我也可以使用模板来接受lambda表达式吗?
template <typename R>
R foo(R (*func)())
{
return func();
}
Run Code Online (Sandbox Code Playgroud)
以下适用于函数指针和lambda表达式,但只接受bool.
bool foo(std::function<bool()> func)
{
return func();
}
bool a = foo( [](){ return true; } );
Run Code Online (Sandbox Code Playgroud)
我尝试使用模板使它变得通用,但是当它被调用时我得到一个编译器错误(没有匹配的函数)
template <typename R>
R foo(std::function<R()> func)
{
return func();
}
bool a = foo( [](){ return true; } );
Run Code Online (Sandbox Code Playgroud)