2014-01-18 85 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