Ошибка компиляции "initializer element is not constant" - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Наткнулся(ладно, каюсь - сам написал) на вот такой код:
#include <stdio.h>
 
static const int x = 23;
static const double y = 1.0 / (double)x;
 
int main() {
    printf("x = %d, y = %lf\n", x, y);
    return 0;
}
он не компилируется в связи с тем что:
gcc -O0 -g3 -Wall -c -fmessage-length=0 -o test.o ..\test.c
..\test.c:4:1: error: initializer element is not constant
 const double y = 1.0 / (double)x;
 ^
я несколько непонимаю почему так? ведь x - константа, а 1.0 разделить на константу - тоже константа. то есть, я какбы константу инициализирую константой, однако gcc имеет инное мнение по этому поводу. полагаю дело в static, т.к. если убрать спецификатор const, то ошибка остается. а вот так работает:
#include <stdio.h>
 
int main() {
    const int x = 23;
    const double y = 1.0 / (double)x;
 
    printf("x = %d, y = %lf\n", x, y);
    return 0;
}
гугление выдает только информацию, касательно того как static, действует на область видимости переменной.

Решение задачи: «Ошибка компиляции "initializer element is not constant"»

textual
Листинг программы
static const double y = 1.0 / (double)x;

Объяснение кода листинга программы

В данном коде происходит объявление и инициализация константной переменной типа double с именем y. Значение переменной y вычисляется как результат деления единицы на значение переменной x. Тип данных переменной x не указан в данном фрагменте кода, но предполагается, что это целочисленный тип. Также стоит отметить, что в данном коде не происходит никаких действий, кроме инициализации переменной y.

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы