2014-01-18 54 views
1
#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支持范围解析吗?

+1

没有,C没有任何关系如C++范围界定操作符。 –

回答

3

不,这是一个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; 
} 
+0

您还可以将文件作用域变量称为'extern g',甚至可以在内部作用域中重新声明。即。加入'{extern int g; printf(“全局值g =%d \ n”,g);在上述计划返回之前。哦,哦。咄。这已经在相关的答案中。 :) –

+1

为什么会有人想要隐藏一个变量,然后使用一个指针重新找回它?在维护代码时尖叫出副作用。无论如何变量名都是免费的。我希望看到一个真实世界的例子,一个“必须”做到这一点。 – Devolus

+0

Devolus,我实际上没有想到我需要这样做的真正原因,这就是为什么我不能推荐它。 OP可能有一个理由,然而奇怪的是:-) – paxdiablo