30/09/2018, 16:59

Lỗi "declaration may not appear after executable statement in block" trong C?

Em muốn khai báo 1 mảng ngay giữa chương trình, vì chưa biết giá trị mảng đó là bao nhiêu nhưng lại bị lỗi như vầy:

uint8_t a;

a = 23; // a se duoc tinh 1 gia tri nao do
uint8_t b[a];  // khai báo khúc này bị lỗi
// error: declaration may not appear after executable statement in block

Thank các bạn nhiều.

Nguyễn Minh Dũng viết 19:07 ngày 30/09/2018

Do compiler bạn đang dùng hỗ trợ chuẩn C89. Trong chuẩn C89 không cho phép khai báo sau khi đã có một câu lệnh được gọi.

Vì thế phải mang uint8_t b[a]; lên trước chỗ gán a = 23. Có điều không thể làm vậy được, thế nên ta phải dùng con trỏ và cấp phát động malloc hoặc calloc.

Hoặc sử dụng compiler C99.

Dương Hoàng viết 19:14 ngày 30/09/2018

Em khai báo vậy thì hết lỗi, nhưng mà sai ở chỗ nào em chưa hiểu, anh Đạt chỉ giúp em ạ
Em khai báo buffer có 123 giá trị như vậy có đúng chưa anh nhỉ?
Thank anh nhiều.

uint8_t*buffer;
uint8_t buffersize;

buffersize = 123;
buffer=(uint8_t*)malloc(buffersize);

Lập Trình Sư viết 19:08 ngày 30/09/2018

Em khai báo vậy thì hết lỗi, nhưng mà sai ở chỗ nào em chưa hiểu, anh Đạt chỉ giúp em ạ Em khai báo buffer có 123 giá trị như vậy có đúng chưa anh nhỉ?

Đọc kĩ lại phần giải thích ở trên của @ltd đi, ko phải lướt lướt.

Code bên dưới là ok rồi.

Bài liên quan
0