Ale*_*ach 3 c initialization function local-variables static-variables
我正在编写一个数据混搭功能,我正在修改一段动态比特破碎音频滤波器的音频数据.我很方便使用静态变量,因为它们的值在函数调用之间延续,这有助于我通过在渲染回调中递增等来实现一些有趣的基于时间的效果.
例如,一种效果使用sin函数来调整一些声音效果.像这样:
void mangle(float * data, int n) {
static bool direction = false;
static float bottom = 0;
static float top = n;
static float theta = 0;
theta += 5;
// data = sin(theta) etc..
Run Code Online (Sandbox Code Playgroud)
所以我希望theta初始化一次,然后再修改.同样,top想要成为静态变量,因为我稍后在函数中修改它.另外,由于基于程序状态的变化,top应该采取参数的值.但是当我去分配时,我得到了编译器错误nnntop
Initializer element is not a compile-time constsant.
有没有办法将参数分配给静态变量?有没有其他方法可以实现我想要的没有静态变量?我知道我可以使用实例变量,但我发现它太多了.
static变量在程序执行开始之前初始化,因此您不能使用变量值来初始化static变量.您需要一个编译时常量值来初始化static变量.
引用C11标准,章节§6.2.4,对象的存储持续时间(强调我的)
[..]或使用存储类说明符static,具有静态存储持续时间.它的生命周期是程序的整个执行,它的存储值只在程序启动之前初始化一次.
但是,您始终可以为变量分配新值static.
也就是说,根据章节§6.7.9 进入初始化部分,
如果没有显式初始化具有静态或线程存储持续时间的对象,则
- ...
- 如果它具有算术类型,则将其初始化为(正或无符号)零
- ...
所以,你不必初始化static float小号明确到0.您可以在代码中稍后分配任何值.