有没有办法写一个知道另一个宏使用了多少次的宏?

And*_*owl 0 c macros c-preprocessor

我有类似以下内容,我不满意:

#define BEGIN {

#define END_1 };
#define END_2 END_1 };
#define END_3 END_2 };
// ... (possibly more of these) ...

#define END(x) END_ ## x

int main()
{
    BEGIN
    BEGIN
    BEGIN
    END(3) // <- I don't want to pass the 3 here

    BEGIN
    BEGIN
    END(2) // <- I don't want to pass the 2 here
}
Run Code Online (Sandbox Code Playgroud)

我想重写BEGIN和/或END后者的定义,以便后者不需要进行论证.

我相信这不可能做到,但我对C预处理器不是很有经验.是否至少有任何方法可以比我发布的示例更接近我的目标?

Eri*_*hil 7

GCC 和MSVC提供非标准__COUNTER__宏,每次使用时都会递增.但是,没有办法重置它.

无论你在尝试什么,都应该以另一种方式完成.