c 语言声明变量是放在哪,在哪里可以和不能在C中声明新变量?

我也经常听到把变量放在函数顶部是最好的处理方法,但是我非常不同意。我更喜欢将变量限制在尽可能小的范围内,这样变量被滥用的机会就更少了,因此,在程序的每一行中填满我的思维空间的东西也就更少了。

尽管所有版本的C都允许词法块作用域,但是您可以在其中声明变量取决于目标C语言版本:

从C99开始或C ++

诸如gcc和clang之类的现代C编译器支持C99和C11标准,这些标准允许您在可能进行语句的任何地方声明变量。变量的范围从声明的点开始到块的末尾(下一个大括号)。

if( x < 10 ){

printf("%d", 17);  // z is not in scope in this line

int z = 42;

printf("%d", z);   // z is in scope in this line

}

您还可以在for循环初始化程序中声明变量。该变量仅在循环内部存在。

for(int i=0; i<10; i++){

printf("%d", i);

}

ANSI C(C90)

如果您以较早的ANSI C标准为目标,则仅限于在括号1之后立即声明变量。

但这并不意味着您必须在函数顶部声明所有变量。在C语言中,您可以将大括号分隔的块放在语句可以到达的任何位置(不仅在诸如if或之后for),并且可以使用它引入新的变量作用域。以下是以前的C99示例的ANSI C版本:

if( x < 10 ){

printf("%d", 17);  // z is not in scope in this line

{

int z = 42;

printf("%d", z);   // z is in scope in this line

}

}

{int i; for(i=0; i<10; i++){

printf("%d", i);

}}

1请注意,如果您使用的是gcc,则需要传递该--pedantic标志以使其实际上执行C90标准,并抱怨变量声明在错误的位置。如果只使用-std=c90它,它将使gcc接受C90的超集,该超集还允许更灵活的C99变量声明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值