为什么我需要花括号?

str*_*ner 12 c

考虑这个简单的程序:

fails.c:

#include <stdio.h>                                            

int main(){                                                   
    int i = 10;                                                                                         
    if (i == 10)                                          
        int j = 11;                                                                                         
    return 0;        
}                                                             
Run Code Online (Sandbox Code Playgroud)

无法编译(gcc fails.c),给出此错误:

fails.c: In function ‘main’:
fails.c:7:3: error: expected expression before ‘int’
   int j = 11;
   ^
Run Code Online (Sandbox Code Playgroud)

但是这个很顺利:

#include <stdio.h>

int main(){
    int i = 10;
    if (i == 10){
        int j = 11;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为工作的目的是把它们放进{}去.但我想知道为什么这是必需的.

为什么它会以这种方式表现出来printf

#include <stdio.h>

int main(){
    int i = 10;
    if (i == 10)
        printf("some text\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

lll*_*lll 8

这是因为if必须后跟一个声明:

C99/6.8.4

if(表达式)语句

不过,声明声明:

C99/6.8

声明:

标记的声明

复合语句

表达式语句

选择语句

迭代语句

跳转语句

当放入a时{},它是一个复合语句,因此可以.