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++)。
您可以使用以下技巧:
#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 会发出错误“初始化元素不是常量”。