Czy zmienna stała może być użyta do zadeklarowania rozmiaru tablicy w C?

Dlaczego następujący kod powoduje błąd?

const int a = 5;
int b[a]={1,2,3,4,5};

A także, gdy próbowałem skompilować powyższy kod bez słowa kluczowego „const”, otrzymałem ten sam błąd:

int a = 5; 
int b[a]={1,2,3,4,5};

dlaczego tak jest? Jaki błąd popełniam tutaj?

I jeszcze jedno pytanie: Kiedy stałe są zastępowane ich rzeczywistymi wartościami w kodzie, tj. Jeśli zadeklaruję zmienną powiedzmy: const int x = 5; Wiem, że w pamięci RAM nie jest przydzielana żadna pamięć dla zmiennej x, ale obszar zmiennej stałej w pamięci ROM ma wartość 5 i że x jest po prostu zastępowany wartością 5 wszędzie, gdzie x pojawia się w kodzie. Ale kiedy to się dzieje? Czas kompilacji? Czas rozruchu? Czas przetwarzania wstępnego?

PS: Mówię o Embedded C (działającym na mikrokontrolerze itp.), A nie C działającym na moim pulpicie. Tak więc system wbudowany musi mieć ROM (Flash, EEPROM ...). Co by się wtedy stało?

questionAnswers(5)

yourAnswerToTheQuestion