对于在预处理器阶段展开的循环宏?

0x9*_*x90 7 c gcc linux-kernel c-preprocessor

我想用gcc预处理器写几乎相同的代码声明500次.让我们说出于演示目的,我想使用一个宏FOR_MACRO:

#define FOR_MACRO(x) \
    #for i in {1 ... x}: \
        const int arr_len_##x[i] = {i};
Run Code Online (Sandbox Code Playgroud)

并且呼叫FOR_MACRO(100)将转换为:

const int arr_len_1[1] = {1};
const int arr_len_2[2] = {2};

...

const int arr_len_100[100] = {100};
Run Code Online (Sandbox Code Playgroud)

Chr*_*oph 9

这不是一个好主意:

尽管原则上可行,但使用预处理器意味着您必须至少手动展开循环一次,最终会在循环深度上产生一些任意实现定义的限制,并且所有语句将在一行中生成.

更好地使用您选择的脚本语言来生成代码(可能在单独的可包含文件中)并将其与您的构建过程集成.