Tiền xử lý #if trong C

Hi mọi người, mình có vấn đề này. Nhờ mọi người giúp với ạ.

uint8 DisableAllowed[4]={ 0x01 , 0x01, 0x01, 0x01 };

uint8 SeclectMode(uint8 Mode,uint8 instance){
    uint8 bDisableAllowed;
    bDisableAllowed = DisableAllowed[instance];
#if (bDisableAllowed == 0x00)
    if(Mode == 0)
	{
	    return 0;
	}
#endif
    return 1;
}
int main(){
    SeclectMode(0, 1);
	return 0;
}

Khi mình chạy thì giá trị bDisableAllowed trong #if kia không cập nhật do đó là tiền xử lý. Và hàm SeclectMode sẽ return về 0.

Có cách nào để viết lại đoạn code này mà kiểm tra được giá trị DisableAllowed theo kiểu viết #if này không ạ.
Nhờ mọi người giúp mình với.

Thanks mọi người.

Hi @Phu_Mai,

Quá trình tiền xử lý sẽ được thực hiện trước quá trình biên dịch, vì vậy trong trường hợp này giá trị của bDisableAllowed được hiểu là 0. Nếu bạn vẫn muốn dùng tiền xử lý để kiểm tra thì bDisableAllowed cũng phải được khai báo dưới dạng tiền xử lý (#define), điều này sẽ không thực hiện được nếu giá trị này chỉ có thể nhận biết lúc biên dịch chương trình.

2 Likes

Tính năng bạn đang dùng là tiền xử lí, nghĩa là nó sẽ được thực hiện bước biên dịch, trình biên dịch sẽ dựa vào chỉ dẫn tiền xử lí mà thực hiện sửa lại mã nguồn của bạn rồi mới biên dịch. Vì thé nó sẽ không thể hoạt động đối với những yêu cầu lúc runtime.
Với yêu cầu của bạn thì chỉ cần dùng 1 câu lệnh if else thông thường là xong.
PS: Nguyên tắc 1 - Keep it simple stupid (KISS) :stuck_out_tongue_winking_eye:

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