C语法复合语句

时间:2014-05-14 20:54:02

标签: c context-free-grammar

我正在看K& R上的C语法,我发现了这个:

compound-statement:
{ declaration-list opt statement-list opt }

declaration-list:
declaration
declaration-list declaration

statement-list:
statement
statement-list statement

这意味着我们不能在声明后声明。但是我经常这样做:

#include <stdio.h>

int main()
{
  printf("Lets use a new block");
  {
    int a=1;
    printf("%d",a);
    int b=3;
    printf("%d",b);
  }
  return 0;
}

此代码编译时没有警告且没有错误。我不能正确理解语法吗?

2 个答案:

答案 0 :(得分:4)

要获得所需的错误,请将这些标志传递给gcc:

-std=c90 -pedantic-errors

GNU扩展以及更新的C标准允许在范围内的其他语句之后进行声明。

答案 1 :(得分:3)

你理解语法很好。但是,自K&amp; R天以来,C已经发展,现在语法接受交错声明和陈述。