【问题标题】:Does C supports scope resolution? [duplicate]C 是否支持范围解析? [复制]
【发布时间】:2014-02-07 17:18:47
【问题描述】:
    #include <stdio.h>

/* global variable declaration */
int g = 20;

int main ()
{
  /* local variable declaration */
  int g = 10;

  printf ("value of g = %d  %d\n",  g,::g);

  return 0;
}

当我试图运行这个程序时。它抛出错误main.c:11:39: error: expected expression before ':' token printf ("value of g = %d %d\n", g,::g);。但是如果它是用 C++ 编写的,它就可以正常工作。

【问题讨论】:

  • 不,C 没有类似 C++ 范围操作符的东西。

标签: c scope


【解决方案1】:

不,这是 C++ 功能。在 C 语言中,在内部范围内声明变量将隐藏在外部范围内的变量。

如果您必须这样做,您可以使用指针来获取外部范围,但这有点麻烦,我不建议这样做:

#include <stdio.h>
int g = 20;
int main () {
  int *pGlobalG = &g;
  int g = 10;
  printf ("value of g = %d %d\n", g, *pGlobalG);
  return 0;
}

【讨论】:

  • 您也可以将文件范围变量称为extern g,甚至在内部范围内重新声明。 IE。在上述程序的返回之前添加{ extern int g; printf("value of global g = %d\n", g); }。 ... 哦。呃。这已经在链接的答案中了。 :)
  • 为什么有人想要隐藏一个变量,然后使用指针返回它?维护代码时会产生副作用。无论如何,变量名都是免费的。我想看看一个“必须”做的真实例子。
  • Devolus,我真的想不出我需要这样做的真正原因,这就是为什么我不能推荐它。 OP可能有原因,但很奇怪:-)
猜你喜欢
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
相关资源
最近更新 更多