在 C 中编译时填充数组

问题描述 投票:0回答:1

我有一些嵌入式 C 代码,我想要一个正弦值列表。我在 C++ 中使用 constexpr 函数做了类似的事情,该函数在主循环之外返回 std::array :

#include <array>
#include <cmath>

#define sineListSize 100
#define sineListAmp 100

constexpr auto makeSineList() {
    std::array<int, sineListSize> list = {};

    for (int i=0; i<sineListSize; i++) {
        list[i] = sineListAmp * sin(i * 2 * M_PI / sineListSize);
    }

    return list;
}

auto sineList = makeSineList();

我现在所做的只是将列表放在单独的头文件中,因为它有 8192 个元素,并且达到有符号的 32 位整数限制。很难修改(我必须生成值并在我想更改生成参数时手动复制它们)并且我必须将所有参数保留在注释中。我该如何在 C 中做这样的事情?

c c-preprocessor constexpr compile-time
1个回答
0
投票

经典方法是编写一个程序来计算值并将它们以 C 数组初始化的格式写入输出。作为项目构建过程的一部分,它在构建主机上编译并运行该程序,将其输出定向到头文件。该头文件包含在您的其他源中。

© www.soinside.com 2019 - 2024. All rights reserved.