Esecuzione cicli for concatenati

Buon giorno tutti, ho un dubbio e mi piacerebbe avere un vostro parere/consiglio.
Devo fare un ciclo for concatenato ed uscire da un for se la condizione è vera, ma non deve uscire anche dal secondo for, perchè deve verificare anche il secondo for.
praticamente ho scritto:

for (byte i=0;i<7;i++){
                       if(bitRead(variabile1[0][2],i)==1 && variabile2==i){
                                                            abilita1=true;
                                                            return;
                                                                          }
                       }

Quindi se la condizione è vera esci dal for e metti a vero l'abilitazione, mentre se falsa continua a fare il check fino a che i è <7
Questa operazione dovrei farla per l'intero array vaiabile1, e cioè 5 volte e dovrei scrivere

for (byte i=0;i<7;i++){
                       if(bitRead(variabile1[0][2],i)==1 && variabile2==i){
                                                            abilita1[0]=true;
                                                            return;
                                                                          }
                       }
for (byte i=0;i<7;i++){
                       if(bitRead(variabile1[1][2],i)==1 && variabile2==i){
                                                            abilita1[1]=true;
                                                            return;
                                                                          }
                       }
for (byte i=0;i<7;i++){
                       if(bitRead(variabile1[2][2],i)==1 && variabile2==i){
                                                            abilita1[2]=true;
                                                            return;
                                                                          }
                       }
for (byte i=0;i<7;i++){
                       if(bitRead(variabile1[3][2],i)==1 && variabile2==i){
                                                            abilita1[3]=true;
                                                            return;
                                                                          }
                       }
for (byte i=0;i<7;i++){
                       if(bitRead(variabile1[4][2],i)==1 && variabile2==i){
                                                            abilita1[4]=true;
                                                            return;
                                                                          }
                       }

Quindi pensavo di scrivere un for concatenato:

for(byte a=0;a<5;a++){
         for (byte i=0;i<7;i++){
                       if(bitRead(variabile1[a][2],i)==1 && variabile2==i){
                                                            abilita1[a]=true;
                                                            return;
                                                                          }
                               }
                     }

Ma quel return mi fa uscire da tutto il ciclo for, oppure solo dal secondo, quello per intenderci con indice i???

esce da tutto, usa il while con apposita condizione e sei a cavallo

Non devi usare return; ma l'istruzione break;

Grazie per le risposte.
Cotestatnt, quindi basta sostituire il return con break e il primo ciclo for continua a lavorare?Ho capito giusto?
Fabpolli, il while intendi così

byte indice=0
while (indice>5){
                for (byte i=0;i<7;i++){
                       if(bitRead(variabile1[a][2],i)==1 && variabile2==i){
                                                                           abilita1[a]=true;
                                                                           return;
                                                                           }
                                      }
                               indice++;
                }                               
                            

???

no dovresti sostituire il for interno con il while e usare, oltre all'indice, una condizione che se falsa ti fa uscire. Quindi nell'if interno la setteresti a false in modo da uscire dal while e proseguire con il for esterno.

Grazie Fabpolli, sempre molto gentile...
Poi vedo di metterlo in pratica; la soluzione di cotestatnt come la vedi??

assolutamente valida e risolutiva. La mia soluzione era volta a farti crescere nella logica della programmazione, la sua è sicuramente di bassissimo impatto sul codice presente e ti fa ottenere comunque il risultato dediderato

Vediamo se ho capito

boolean uscita=true;
byte i=0;
for (byte a=0;a<5;a++){  
                    while (uscita){ 
                           if(bitRead(variabile1[a][2],i)==1 && variabile2==i){
                                                                   abilita[a]=true;
                                                                   uscita=false;
                                                                              }
                           else{
                                i++;
                                if (i>6){
                                         i=0;
                                         uscita=false;
                                            }
                                  }
                                  }
                       uscita=true;
                       }

Potrebbe andare??

no perché se prima della chiusura del while metti a true uscita non esci mai.
Inoltre puoi semplificarlo usando gli operatori booleani nella condizione del while

while(uscita && i<7)

Comunque una condizione composta può essere scritta anche in un for, che di differente dal while ha solo l'inizializzazione e la modifica della variabile di ciclo compattate nella sua definizione.

Non ho capito perché complicare con un while dentro al for aggiungendo una variabile come flag invece di mettere semplicemente un "break" per far uscire dal for interno e quindi ciclare il for esterno:

for(byte a=0;a<5;a++){
  for (byte i=0;i<7;i++){
    if(bitRead(variabile1[a][2],i)==1 && variabile2==i){
      abilita1[a]=true;
      break;
    }
  }
}

Nessun motivo valido tecnicamente, come indicato nel post #7 volevo spingere l'OP a ragionare in modo differente su come si potesse scrivere il codice anche senza conoscere l'esistenza del break.
A parte quello nel solito post ho indicato che la soluzione proposta da @cotestatnt è la più efficace e a impatto quasi nullo sul codice già esistente