如何添加静态断言来检查变量是否是静态的?

Ofi*_*esh 4 c static static-assert

我有一个仅适用于静态局部变量的宏(因为它使用内联汇编表示法来提取有关变量的数据)。我需要一种方法来强制宏的输入确实是静态局部变量:

正确的:

func f()
{
    static int x;
    my_macro(x);
}
Run Code Online (Sandbox Code Playgroud)

不正确:

func f()
{
    int x;
    my_macro(x);
}
Run Code Online (Sandbox Code Playgroud)

我使用 GCC 来处理 C(没有 C++)。

Ser*_*sky 5

您可以使用以下技巧:

#define ASSERT_LOCAL_STATIC(v) static void *p_ ## v = &v

void fn()
{
    int nonstatic_var = 0;
    static int static_var = 0;

    ASSERT_LOCAL_STATIC(static_var);
    ASSERT_LOCAL_STATIC(nonstatic_var);
}
Run Code Online (Sandbox Code Playgroud)

对于非静态变量,GCC 会发出错误“初始化元素不是常量”。