por que eu preciso das chaves aqui?

struggling_learner

Considere este programa simples:

fails.c:

#include <stdio.h>                                            

int main(){                                                   
    int i = 10;                                                                                         
    if (i == 10)                                          
        int j = 11;                                                                                         
    return 0;        
}                                                             

Falha ao compilar ( gcc fails.c), apresentando este erro:

fails.c: In function ‘main’:
fails.c:7:3: error: expected expression before ‘int’
   int j = 11;
   ^

Mas este vai bem:

#include <stdio.h>

int main(){
    int i = 10;
    if (i == 10){
        int j = 11;
    }
    return 0;
}

Eu descobri que a solução é colocá-los {}. Mas eu gostaria de saber por que isso é necessário.

Por que se comporta dessa maneira, quando algo como printfé aceitável?

#include <stdio.h>

int main(){
    int i = 10;
    if (i == 10)
        printf("some text\n");
    return 0;
}
llllllllll

Isso ocorre porque ifdeve ser seguido por uma declaração:

C99 / 6.8.4

declaração if (expressão)

No entanto, uma declaração não é uma declaração:

C99 / 6,8

declaração:

declaração rotulada

declaração composta

expressão-declaração

declaração de seleção

declaração de iteração

declaração de salto

Quando colocado dentro de um {}, é uma instrução composta, portanto, ok.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

por que eu preciso das chaves aqui?

Por que eu não preciso do SFINAE aqui

Por que preciso dessas chaves aqui? Alguém pode me explicar por que isso acontece?

Por que preciso de estática aqui?

Que tipo de junção eu preciso aqui no R?

Que tipo de junção eu preciso aqui no R?

Por que eu perco dados aqui? (SwiftUI)

por que eu tenho que usar grupo por aqui?

Por que preciso de uma anotação de tipo aqui?

Por que preciso de um ponto e vírgula aqui?

por que eu preciso usar strdup ()?

Por que eu preciso de sublinhados rapidamente?

Por que eu sempre preciso do SUDO

por que eu preciso usar strdup ()?

Por que eu preciso definir um DefaultForbidScheme

Por que eu preciso importar "VToolbarItems"?

Por que eu preciso das bibliotecas std e string para usar strings em c ++

Por que o yarn instala dependências de desenvolvimento quando eu só preciso das compilações?

Por que eu preciso das bibliotecas std e string para usar strings em c ++

Por que chaves enum exponenciais são usadas aqui?

Por que eu chego aqui java.io.EOFException?

Eu realmente preciso do Hook useEffect () aqui?

Eu realmente preciso do Hook useEffect () aqui?

Eu preciso chamar explicitamente um destruidor aqui?

Por que preciso usar essas chaves neste método React

Por que preciso shell = True aqui para que subprocess.check_output do Python funcione?

Por que eu preciso da variável Content / Type?

Por que eu preciso para mapear IntStream de Corrente <caracteres>

Por que eu preciso acessar `default` em meu objeto typescript?