но я получаю ошибку компилятора с жалобой на то, что _struct не существует
Я скомпилировал ваш код. Он компилируется без проблем в моей системе. Не следует использовать имена переменных, начинающиеся с подчеркивания, поскольку они зарезервированы. Было бы лучше, если бы вы могли опубликовать полное сообщение компилятора.
struct foo {
int var;
};
#define sizeit(x) .var = sizeof(struct x)
static const struct foo bar = {
.var = 8
};
static const struct foo bar2 = {
sizeit(foo)
};
int main()
{
return 0;
}
Чтобы получить preprocessed
исходный код, мы можем использовать gcc
с опцией -E
. Предварительно обработанный вывод приведен ниже:
# 1 "stack_macro2.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "stack_macro2.c"
struct foo {
int var;
};
static const struct foo bar = {
.var = 8
};
static const struct foo bar2 = {
.var = sizeof(struct foo)
};
int main()
{
return 0;
}