首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言的花括号具体原理,该怎么解决

2012-02-20 
C语言的花括号具体原理在c语言中如果有voidfun(void){inta0intb1ab//然后在声明变量cintc0}则程序

C语言的花括号具体原理
在c语言中
如果有
void   fun(void)
{
        int   a   =   0;
        int   b   =   1;
        a   =   b;
        //然后在声明变量c
        int   c   =   0;
}
则程序编译不过
但是如下代码却可以编译通过
void   fun(void)
{
        int   a   =   0;
        int   b   =   1;
        a   =   b;
        //然后在声明变量c
        {
                int   c   =   0;
        }
}
为什么啊?能否从深层次点   比如从c语言和汇编   寄存器的角度给予解释?

[解决办法]
{ } 产生了一个局部域吧。

现在的C还是这个样子的吗?好生硬啊。不符合“需要时再定义”,收小范围的风格。我不喜欢。
[解决办法]
进入一个大括号,就进入了一个新的作用域。相当于在这个作用域的开始定义变量,与C语言定义变量的规则相符。
[解决办法]
int a = 0;
int b = 1;
a = b;
int c = 0;


是不是这样:
_a dd 0
_b dd 1
mov eax,[_b]
mov [_a],eax
_c dd 0 ;汇编成机器码后这里当指令执行,会引起错误


而:
int a = 0;
int b = 1;
a = b;
{
int c = 0;
}
则是:
_a dd 0
_b dd 1
mov eax,[_b]
mov [_a],eax
jmp _start

_seg:
_c dd 0
_start:
....


仅仅猜测而已,不知道是不是这样。以前写6502的程序时就犯过第一种的错误,把数据定义在代码中了
[解决办法]
void fun(void)
{
int a = 0;
int b = 1;
a = b;
//然后在声明变量c
int c = 0;
}
这种声明方式在C89规范中是不支持的。
但是在C99规范中,就是一个正确的使用方法,如果使用gcc编译,只要加上-std=c99选项,就可以编译通过了

热点排行
Bad Request.