Инициализация и присвоение стати c Переменная - PullRequest
0 голосов
/ 10 апреля 2020
#include <stdio.h>
int main(void)
{
  int i=10;
  static int x=i;
  if (x == i)
    printf("Equal");
  else if(x > i)
    printf("Greater");
  else
    printf("Lesser");
  return 0;
} 

Почему этот фрагмент кода дает ошибку времени компиляции, может кто-нибудь объяснить, что происходит за кулисами?

1 Ответ

3 голосов
/ 10 апреля 2020

Как написано в C Стандарт

Все объекты со сроком хранения c должны быть инициализированы (установлены в их начальные значения) перед запуском программы

и (6.7.9 Инициализация)

4 Все выражения в инициализаторе для объекта, который имеет статическую или потоковую длительность хранения, должны быть константными выражениями или строковыми литералами

То есть инициализаторы должны быть константными выражениями времени компиляции. Однако в объявлении

static int x=i;

в качестве инициализатора используется выражение времени выполнения.

...