局部变量与全局变量重名问题

njfylong 2011-10-31 10:41:27
听说局部变量和全局变量可以重名,但是用全局变量时要使用“::”,写了几行代码验证了下,发现错了,不知道是我代码写的问题还是其他。。。
代码:

#include <stdio.h>
#include <stdlib.h>

int a=10;

int main()
{
int a=2;
printf("local a=%d\n", a);
printf("all a=%d\n",::a);

return 0;
}
求解惑?????
...全文
432 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
siasjack 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 studycbc 的回复:]

C/C++ code

#include <stdio.h>
#include <stdlib.h>

static int a=10;//定义全局静态变量就行了,C可以重名

int main()
{
int a=2;
printf("local a=%d\n", a);
printf("all a=%d\n",::a);

return 0;
}
[/Quote]
这样也不行!在gcc下编译不能通过!
a136973446aa 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 frankhb1989 的回复:]

引用 18 楼 njfylong 的回复:

引用 1 楼 frankhb1989 的回复:

一元::是C++用的表示全局命名空间的操作符,纯C当然不行。



没明白,今天再打开竟然可以运行了~

注意你用的源文件的扩展名是不是.cpp之类,被当作C++程序编译了。
一般编译器会把.c当成C源文件,.cpp/.cxx/.cc/.C(如果这个平台的文件系统区分大小写)当作……
[/Quote]
++
FrankHB1989 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 njfylong 的回复:]

引用 1 楼 frankhb1989 的回复:

一元::是C++用的表示全局命名空间的操作符,纯C当然不行。



没明白,今天再打开竟然可以运行了~
[/Quote]
注意你用的源文件的扩展名是不是.cpp之类,被当作C++程序编译了。
一般编译器会把.c当成C源文件,.cpp/.cxx/.cc/.C(如果这个平台的文件系统区分大小写)当作C++源文件。
AndyZhang 2011-11-01
  • 打赏
  • 举报
回复
用C++编译器就不会错啦
njfylong 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 frankhb1989 的回复:]

一元::是C++用的表示全局命名空间的操作符,纯C当然不行。
[/Quote]


没明白,今天再打开竟然可以运行了~
njfylong 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 studycbc 的回复:]

C/C++ code

#include <stdio.h>
#include <stdlib.h>

static int a=10;//定义全局静态变量就行了,C可以重名

int main()
{
int a=2;
printf("local a=%d\n", a);
printf("all a=%d\n",::a);

return 0;
}
[/Quote]

神奇,再开发工程竟然可以运行,没明白什么回事。。。
周晓荣 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 frankhb1989 的回复:]

一元::是C++用的表示全局命名空间的操作符,纯C当然不行。
[/Quote]
++++1
txzsp 2011-11-01
  • 打赏
  • 举报
回复
C语言是不允许在局部作用域中引用全局作用域的变量的,但是C++中是可以用域作用符号“::”来引用全局变量的。
jiasi888 2011-11-01
  • 打赏
  • 举报
回复
C#才比较好的处理这一点
hwt52wy 2011-11-01
  • 打赏
  • 举报
回复
向一楼学习了 谢谢
litaibai-04 2011-11-01
  • 打赏
  • 举报
回复
一楼正解
苏客达 2011-11-01
  • 打赏
  • 举报
回复
一流正解
koolxiaoyuer 2011-11-01
  • 打赏
  • 举报
回复
如果C

#include <stdio.h>
#include <stdlib.h>

static int a=10;

void printA()
{
printf("all a=%d\n",a);
}

int main()
{
int a=2;
printf("local a=%d\n", a);
printA();
return 0;
}

七擒关羽 2011-11-01
  • 打赏
  • 举报
回复
没看到下面的:: 这个作用域C中没
七擒关羽 2011-11-01
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>

static int a=10;//定义全局静态变量就行了,C可以重名

int main()
{
int a=2;
printf("local a=%d\n", a);
printf("all a=%d\n",::a);

return 0;
}

hulongchuan 2011-11-01
  • 打赏
  • 举报
回复
lz可能懂的语言太多了吧?想必你已经明白了,帮顶吧!!!
星羽 2011-11-01
  • 打赏
  • 举报
回复
::域运算符是c++的
c没有

不过无乱c还是c++,最好还是避免全局局部变量重名
LinkSe7en 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 frankhb1989 的回复:]

一元::是C++用的表示全局命名空间的操作符,纯C当然不行。
[/Quote]
一语道破
zcm_xh2008 2011-11-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 frankhb1989 的回复:]

一元::是C++用的表示全局命名空间的操作符,纯C当然不行。
[/Quote]
++1
FrankHB1989 2011-10-31
  • 打赏
  • 举报
回复
一元::是C++用的表示全局命名空间的操作符,纯C当然不行。

69,373

社区成员

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

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