2017-11-03 4 views
-2

나는이 매우 간단하게 코드가 있습니다배열 변수를 초기화 할 수없는 이유는 무엇입니까?

uint16_t dataSize = 5; 
uint8_t wdata[dataSize] = { 5, 6, 7, 8, 9 }; 

을 나는 오류 메시지 :

variable "wdata" may not be initialized 
uint8_t wdata[dataSize] 

그것은 .ccp 확장자를 가진 파일에 있습니다. 유사한 문과 오류 메시지가있는 다른 테스트 사례 파일이 있습니다.

코드는 gcc으로 아무런 문제없이 컴파일됩니다. 그러나 Visual Studio Code C++ IntelliSense는 오류를보고합니다.

+2

'uint8_t가 [dataSize]'이 아니다 WDATA 유효한 C++ 코드. 일부 컴파일러에서는 가능하지만하지 않습니다. 가변 길이 배열은 일반적으로 지원되지 않습니다. – DimChtz

+2

C에서 (C99에서) [가변 길이 배열] (http://en.cppreference.com/w/c/language/array)을 선언 할 수 있지만 C++에서는 선언 할 수 없습니다. 일부 컴파일러에서는 확장자로 사용할 수 있습니다. –

+1

'dataSize'를 상수로 만듭니다. –

답변

0

:

const uint16_t dataSize = 5; 
uint8_t wdata[dataSize] = { 5, 6, 7, 8, 9 }; 
1

DimChtz가 정확합니다. 변수가있는 컴파일 타임에 크기가 지정된 배열을 초기화 할 수 없습니다.

당신은 단지 어떤 크기로 배열을 초기화하는 더 나을 것 :

Merek R의 조언이 솔루션으로 밝혀졌다
uint16_t dataSize = 5; 
uint8_t wdata[] = { 5, 6, 7, 8, 9 }; 
+5

더 나은 점은'wdata'의 크기에 따라'dataSize'를 계산할 수 있다는 것입니다. –

관련 문제