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.

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.

2 Likes

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 ạ :smile:
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);

Đọ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.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?