Могу ли я использовать макрос в объявлении c struct? - PullRequest
0 голосов
/ 30 августа 2018

у меня

struct foo {
    int var;
}

и статическое объявление foo

static const struct foo bar =  {
     .var = 8;
};

Что я хочу сделать, это

#define sizeit(_struct) .var = sizeof(struct _struct)

чтобы я мог сделать

static const struct foo bar = {
     sizeit(foo)
};

но я получаю ошибку компилятора с жалобой на то, что _struct не существует. Я уверен, что это из-за того, как препроцессор обрабатывает макросы. У кого-нибудь есть лучшее предложение?

Я не хочу динамически размещать структуру.

1 Ответ

0 голосов
/ 30 августа 2018

но я получаю ошибку компилятора с жалобой на то, что _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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...