Jump to content

If e else


Go to solution Solved by bsccara,

Recommended Posts

Posted

Boas.

Estava a escrever uma pequena função que contém 2 if's, encadeados, mas como cada if tem apenas uma linha eu nem sequer me preocupei em colocar as chavetas para agrupar código. Mas ao escrever a função cheguei a um ponto que não consegui decidir a que if pertencia o else que estava a escrever.

Esse momento foi este:

///////Create Virtual Volume file
int create_vt_file(char* p_filename){
   FILE* filename = NULL;
   
   if(check_if_file_exists(p_filename) == ERR_FILE_NO_FILE)
      if(filename = fopen(p_filename, "w"))
         return ERR_NO_ERR_OK;
      else //  <-------Este pertence ao 'if' interior ou vai pertencer ao exterior?    
}

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

  • Solution
Posted

Porque os standards (como o C11) assim o definem; o 'else' pertence ao 'if' imediatamente precedente (páginas 148-149), que não esteja dentro dum 'compound statement'  (dentro de chavetas). Se não precisares do 'else' interior tens de usar as chavetas no primeiro 'if' e pôr o 'else' depois delas.

  • 3 weeks later...
Posted

@PsySc0rpi0n,

Já tivemos esta discussão há uns anos atrás no IRC (eu, tu e mais alguns intervenientes), e foi num pedaço de código semelhante. Tens que perceber que a linguagem C não tem noção do que é a indentação do código, pelo que existem certas regras que tens que cumprir: tal como o @bsccara referiu, está plasmado nos standards que um determinado else pertence ao if que o precede. Se queres contornar as regras, utilizas um bloco definido por { e }, tal como também foi referido.

Lembra-te: a indentação em C é puramente cosmética, não tem valor semântico.

Posted
On 10/20/2018 at 6:32 PM, pwseo said:

@PsySc0rpi0n,

Já tivemos esta discussão há uns anos atrás no IRC (eu, tu e mais alguns intervenientes), e foi num pedaço de código semelhante. Tens que perceber que a linguagem C não tem noção do que é a indentação do código, pelo que existem certas regras que tens que cumprir: tal como o @bsccara referiu, está plasmado nos standards que um determinado else pertence ao if que o precede. Se queres contornar as regras, utilizas um bloco definido por { e }, tal como também foi referido.

Lembra-te: a indentação em C é puramente cosmética, não tem valor semântico.

Eu sei disso.

Aqui a questão era mais saber se era possível, sem o uso dos {}, fazer pertencer o único else ao if exterior!

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Posted
1 hora atrás, PsySc0rpi0n disse:

Eu sei disso.

Aqui a questão era mais saber se era possível, sem o uso dos {}, fazer pertencer o único else ao if exterior!

Então, se sabes o que o @pwseo disse, sabes que a resposta à tua questão é pura e simplesmente esta:

Em 20/10/2018 às 18:32, pwseo disse:

utilizas um bloco definido por { e }, tal como também foi referido

Cumprimentos.

Knowledge is free!

  • 2 weeks later...
Posted

Já percebi. Eu não sabia é que este tipo de detalhes estava definido num standard e por isso, não sabendo disso, a minha pergunta era legítima. A resposta, para quem soubesse disso, à minha pergunta era "Não" e não o que o pwseo disse!

Mas este assunto já está encerrado.

Thanks

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Posted
Em 29/10/2018 às 22:24, PsySc0rpi0n disse:

era "Não" e não o que o pwseo disse!

Tudo bem que o assunto esteja encerrado, mas da próxima vê se tens noção do que dizes 🙂

Knowledge is free!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.