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

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

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

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

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

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

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

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

6   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы