C语言也有多种作用域?

soulmachine 2008-11-30 08:21:18
平是编写C代码,都是在函数头部定义好所有变量,最近看到一段代码在if里面定义变量,吃了已经,于是写了一段代码,居然在VC6下通过编译:
if(1)
{
int a = 0;
int b = 0;
a++;
for( b = 0; b < a; b++)
{
int c = 0;
c++;
}
while(1)
{
int d = 0;
d++;
}
}
else
{
int b = 0;
b++;
}


也就是说if while for 其实都有自己的局部作用域,跟C++完全一样啊(只是C++可以直接在for语句里定义变量,而C语言只能在for里面)。我以前一直以为C语言只有两个级别的作用域,函数局部作用域和作用域,
这个让我非常震惊,各位可以在《The c programming language》里找到依据吗?我在第二版翻了半天没看到标准里有啊,请路过高手解惑!
...全文
158 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
soulmachine 2008-12-01
  • 打赏
  • 举报
回复
我在《C++:The complete reference》,中文名《C++参考大全》第四版的第14页第6行看到:关于在那里声明局部变量,在C(由C89定义的)和C++语言之间有一个很重要的区别。在C语言中,必须在块的开始处、先于任何“动作”语句前声明所有局部变量。

看来C和C++差不多,只是C++更加自由。
soulmachine 2008-12-01
  • 打赏
  • 举报
回复
我也经常写C++和C代码,难道我的关于C的知识太老了吗?我的概念里,纯C只有两种作用域啊,可是在一个开源的代码中见到了if中也可以定义变量。于是发现VC和GCC都支持块作用域,而不仅仅是函数和全局两种了,但我一直不确定这是不是它们对C标准的扩展。
麻烦各位,我要的是权威的定论,比如从《The C Programming language》里摘抄出来的。
BaihowFF 2008-11-30
  • 打赏
  • 举报
回复
VC6其实是C++标准的..虽然不是太准的C++标准...
所以有5个域...全局,局部,语句,类,命名空间...当然VC6并不完全遵守C++标准...也有点出入...
而纯C的作用域应该只有全局和局部的...
fox000002 2008-11-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ztz0223 的回复:]

你的书太老了
趁着年轻换一本新的书看看
建议你看看c primer plus
[/Quote]

lz 的 C 标准太老了

更新一下
jieao111 2008-11-30
  • 打赏
  • 举报
回复
有域吧,不然代码怎么写
kestre1 2008-11-30
  • 打赏
  • 举报
回复
C99也可以直接在for中定义变量哦

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

gcc4.3中使用-std=c99 编译通过
就呆在云上 2008-11-30
  • 打赏
  • 举报
回复

你的书太老了
趁着年轻换一本新的书看看
建议你看看c primer plus
xiaoyuer5222 2008-11-30
  • 打赏
  • 举报
回复
不是只能在函数头部定义好所有变量
是可以在任何语句块的开头定义变量
用{}就构成一个语句块,
if()
{
开头当然能定义变量,因为是在这个语句块的开头
}
冻结 2008-11-30
  • 打赏
  • 举报
回复
除类域,名字空间域外,其它的域应该C,C++一样!
nullah 2008-11-30
  • 打赏
  • 举报
回复

只是C++可以直接在for语句里定义变量,而C语言只能在for里面
??
不会吧
虽然从开始学的就是C++
但是语法规则还是一样的吧

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧