Jump to content
PsySc0rpi0n

ANSWERED If e else

Recommended Posts

PsySc0rpi0n

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

Share this post


Link to post
Share on other sites
PsySc0rpi0n

E porque não ao exterior? Ou melhor, e se eu não precisar de um else interior?


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites
bsccara

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.

Share this post


Link to post
Share on other sites
pwseo

@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.

Share this post


Link to post
Share on other sites
PsySc0rpi0n
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

Share this post


Link to post
Share on other sites
thoga31
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!

Share this post


Link to post
Share on other sites
PsySc0rpi0n

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

Share this post


Link to post
Share on other sites
thoga31
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!

Share this post


Link to post
Share on other sites
PsySc0rpi0n

Epá, noção do que disse acho que sempre tive. Não sabia era da definição presente no tal standard que foi referido. 


Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites

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.