if在c语言什么作用域,if、while中变量的作用域问题

本文对比了C语言与PHP中变量作用域的不同行为。在C语言中,if和while等结构不能使内部声明的变量对外部可见,而PHP允许这些结构中的变量在外部继续生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们知道,函数、类会改变当前变量的作用域。if,while等分支循环结构会继承外部作用域,即外部变量对分支循环结构内部可见。

但是C语言不支持if,while等分支循环结构内部作用域对外可见,而PHP则不然。

在PHP中,if,while等分支循环结构中声明的局部变量,在分支循环结构后面仍然有效。

比如,函数中声明的变量在函数外面是不可见的

C语言:01 #include

02

03 int foo()

04 {

05     int bar;

06     bar  = 3;

07 }

08

09 int main()

10 {

11     printf("%d

",bar);

12     return 0;

13 }

报错:

scope.c: In function ‘main’:

scope.c:11: 错误:‘bar’ 未声明 (在此函数内第一次使用)

scope.c:11: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其

scope.c:11: 错误:所在的函数内只报告一次。)

PHP语言:1 <?php

2 function foo()

3 {

4     $bar = 1;

5 }

6

7 echo $bar;

报错:

Notice: Undefined variable: bar in scope.php on line 7

PHP Notice:  Undefined variable: bar in scope.php on line 7

而if,while等循环分支结构会继承外部作用域,即外部变量对循环分支结构内部可见

类似的:

C语言:01 #include

02

03 int main()

04 {

05     int foo = 1;

06     if(1)

07     {

08         int bar = foo;

09         printf("%d

",bar);

10     }

11

12     while(1)

13     {

14         int bar = foo;

15         printf("%d

",bar);

16         break;

17     }

18

19     return 0;

20 }

输出:

1

1

PHP语言:01 <?php

02 $foo = 1;

03 if(1)

04 {

05     $bar = $foo;

06     echo $bar,"

";

07 }

08

09 while(1)

10 {

11     $bar = $foo;

12     echo $bar,"

";

13     break;

14 }

输出:

1

1

但是不一样的地方来了。

C语言:01 #include

02

03 int main()

04 {

05     int foo = 1;

06     if(1)

07     {

08         int bar = foo;

09         printf("%d

",bar);

10     }

11

12     printf("%d

",bar);

13

14     while(1)

15     {

16         int bar = foo;

17         printf("%d

",bar);

18         break;

19     }

20

21     printf("%d

",bar);

22

23     return 0;

24 }

报错:

scope.c: In function ‘main’:

scope.c:12: 错误:‘bar’ 未声明 (在此函数内第一次使用)

scope.c:12: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其

scope.c:12: 错误:所在的函数内只报告一次。)

PHP语言

01 <?php

02 $foo = 1;

03 if(1)

04 {

05     $bar = $foo;

06     echo $bar++,"

";

07 }

08

09 echo $bar,"

";

10

11 while(1)

12 {

13     $bar2 = $foo;

14     echo $bar2++,"

";

15     break;

16 }

17

18 echo $bar2,"

";

输出:

1

2

1

2

这就是需要注意的地方!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值