warning: (360) array index out of bounds

I'm using code below but i'm getting warning above

#define NUMBER_OF_KEYS      3
#define DEBOUNCE_DELAY      5

#define KEY_UP              0
#define KEY_ENTER           1
#define KEY_DOWN            2


 typedef struct {
        bool IsPressed;
        bool IsReleased;
        uint16_t Counter;      
    } KeyButtons_;


    volatile KeyButtons_ Keys[NUMBER_OF_KEYS];

bool GetKeyState(uint8_t keyId) {
    switch (keyId) {
        case 0: return (bool)!PORTEbits.RE0;
        case 1: return (bool)!PORTEbits.RE1;
        case 2: return (bool)!PORTEbits.RE2;
        default: return false;
    }
}

void KeyboardTask(void) {


for(uint8_t i=0;i<=NUMBER_OF_KEYS-1;i++){


    if(GetKeyState(i)){


        Keys[i].IsReleased=false;
        Keys[i].Counter++;
        if(Keys[i].Counter>=DEBOUNCE_DELAY)
        {
          Keys[i].IsPressed=true;
          Keys[i].Counter=0; 
        }
    }
    else if(!GetKeyState(i) && Keys[i].IsPressed){

        Keys[i].IsReleased=true;  
        Keys[i].IsPressed=false;
    }
    else{  
        Keys[i].IsReleased=false;  
        Keys[i].IsPressed=false;
        Keys[i].Counter=0;  
    }
}    

And in this line i'm getting the warning:

if( Keys[KEY_UP].IsReleased)

If i will change KEY_UP with a number like 0. Then it doesn't show me the warning. How can i fix that?