Следующий код компилируется без жалоб:
struct s {
const int a;
};
static const struct s *s = &(const struct s) {
.a = 5
};
int main(void) {
(void) s;
return 0;
}
Однако, если мы переместим определение s
в тело main
, то есть:
struct s {
const int a;
};
int main(void) {
static const struct s *s = &(const struct s) {
.a = 5
};
(void) s;
return 0;
}
мы получите ошибку:
error: initializer element is not constant
static const struct s* s = &(const struct s) {
^
Поскольку в обоих случаях мы имеем дело с инициализацией stati c (т.е. во время компиляции), почему второй вариант использования является недопустимым? Есть ли способ сделать его легальным в контексте функции?
(я проверил это с помощью G CC 7.3.0 и clang 6.0.0, и они оба сообщают об этом как об ошибке)