由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请教C数组定义问题
相关主题
老年工程师关于神经网络一问C语言重复定义问题
Help!! variable scope ????[合集] 请教: 模板类之继承的一个小问题
python的scope机制 非常垃圾很大的C++程序怎么去读啊?
10个包子请教一个简单的编程问题Smart Pointer
perl question请问这个C++程序有什么问题吗
some C++ interview questionsscoped lock的问题
IDL一问魏老师,你很激动,来,我们做个项目管理
谁熟dotnet 的webservice?到了这个时候
相关话题的讨论汇总
话题: int话题: 定义话题: 循环话题: scope话题: wshadow
进入Programming版参与讨论
1 (共1页)
t**o
发帖数: 144
1
在一个函数里一个数组不能被定义两次,例如定义了一个
int a[3]
如果下面再定义一个
int a[5]
就会出错。但是为什么下面这个程序就不会出错:
int main()
{
int i, j;
for (i=2; i<5; ++i)
{
int a[i];
for (j=0; j {
a[j] = j+i;
printf("a(j) = %d\n", a[j]);
}
}
return 0;
}
貌似在每个循环里a[i]都被重新定义了。是不是这里a[i]的scope仅限于每次循环,而
不是整个函数?分配给a[i]的内存每次循环后都会释放吗,还是等整个循环结束后才释
放?
谢谢高手指教。
f******y
发帖数: 2971
2
每次都释放
n****g
发帖数: 150
3
这种情况对简单的object,例如int,compiler 会不会优化掉?

【在 f******y 的大作中提到】
: 每次都释放
t****t
发帖数: 6806
4
应该会

【在 n****g 的大作中提到】
: 这种情况对简单的object,例如int,compiler 会不会优化掉?
k**f
发帖数: 372
5

Each {} pair introduces a new scope, the variables, including the array,
defined in the new scope are so called automatic variables, allocated on the
stack. At the end of the closing brace, all the automatic variables
released. Within each scope, the inner most name hides the same name at
outer scopes.

【在 t**o 的大作中提到】
: 在一个函数里一个数组不能被定义两次,例如定义了一个
: int a[3]
: 如果下面再定义一个
: int a[5]
: 就会出错。但是为什么下面这个程序就不会出错:
: int main()
: {
: int i, j;
: for (i=2; i<5; ++i)
: {

k****e
发帖数: 100
6
这种情况,打开编译器所有的warning选项,应该可以看到警告的。

the

【在 k**f 的大作中提到】
:
: Each {} pair introduces a new scope, the variables, including the array,
: defined in the new scope are so called automatic variables, allocated on the
: stack. At the end of the closing brace, all the automatic variables
: released. Within each scope, the inner most name hides the same name at
: outer scopes.

t**o
发帖数: 144
7
谢谢各位指教。
我试了一下,这种情况下gcc -Wall没有给任何warning。
t****t
发帖数: 6806
8
use -Wshadow
-Wshadow is not enabled by -Wall.

【在 t**o 的大作中提到】
: 谢谢各位指教。
: 我试了一下,这种情况下gcc -Wall没有给任何warning。

r********u
发帖数: 4
9
这种情况不构成shadow。
shadow是内外层{}里定义了同名的变量,像这种:
foo()
{
int a;
if (...) {
int a;
....
}
}

【在 t****t 的大作中提到】
: use -Wshadow
: -Wshadow is not enabled by -Wall.

r********u
发帖数: 4
10
语义上是每次都释放

【在 t**o 的大作中提到】
: 在一个函数里一个数组不能被定义两次,例如定义了一个
: int a[3]
: 如果下面再定义一个
: int a[5]
: 就会出错。但是为什么下面这个程序就不会出错:
: int main()
: {
: int i, j;
: for (i=2; i<5; ++i)
: {

k****e
发帖数: 100
11
lz问的就是
foo()
{
int a[10];
for (...) {
int a[10];
}
}
这种吧? GCC4给warning啊,-Wshadow

【在 r********u 的大作中提到】
: 这种情况不构成shadow。
: shadow是内外层{}里定义了同名的变量,像这种:
: foo()
: {
: int a;
: if (...) {
: int a;
: ....
: }
: }

r********u
发帖数: 4
12
ta想问的貌似是循环体执行多次,循环体内的定义会不会构成重复定义

【在 k****e 的大作中提到】
: lz问的就是
: foo()
: {
: int a[10];
: for (...) {
: int a[10];
: }
: }
: 这种吧? GCC4给warning啊,-Wshadow

t****t
发帖数: 6806
13
那是他的第二个问题了...

【在 r********u 的大作中提到】
: ta想问的貌似是循环体执行多次,循环体内的定义会不会构成重复定义
1 (共1页)
进入Programming版参与讨论
相关主题
到了这个时候perl question
不管谁输赢,态度对了some C++ interview questions
老魏,我们不要说那么多,先讨论需求IDL一问
Javascript的Scope问题谁熟dotnet 的webservice?
老年工程师关于神经网络一问C语言重复定义问题
Help!! variable scope ????[合集] 请教: 模板类之继承的一个小问题
python的scope机制 非常垃圾很大的C++程序怎么去读啊?
10个包子请教一个简单的编程问题Smart Pointer
相关话题的讨论汇总
话题: int话题: 定义话题: 循环话题: scope话题: wshadow